├── .github └── workflows │ └── static.yml ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE.txt ├── README.md ├── babel.config.js ├── build.sh ├── docs ├── contact-us.mdx ├── export-or-import-rules.mdx ├── faq.mdx ├── getting-started.mdx ├── introduction.mdx ├── library.mdx ├── privacy-policy.mdx ├── rule-settings.mdx └── terms-of-use.mdx ├── docusaurus.config.ts ├── library ├── README.md ├── categories.json └── rule-sets │ ├── 0_example-rule │ ├── metadata.json │ └── rule-set.json │ ├── 10_DELETED_reddit-new-layout │ └── .gitkeep │ ├── 11_reddit-old-layout │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 12_google-search-disable-ai │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 13_youtube_watch_embed │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 14_facebook_always_show_most_recent_feed │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 15_google_maps_to_apple_maps │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 16_google_search_to_kagi │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 17_google_search_to_startpage │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 18_google_search_to_brave_search │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 19_youtube_shorts_to_normal_videos │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 1_google-meet-open-in-chrome │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 20_fix_open_puppies │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 21_youtube_open_in_yattee_app │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 22_amazon_strip_affiliate_tracking_parameters │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 23_twitter_to_nitter │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 24_google_search_to_chatgpt │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 25_ddg_to_startpage_wile_keeping_bangs_working │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 26_google_search_to_chatgpt_by_default │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 27_google_search_to_perplexity │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 2_notion-open-in-notion-app │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 3_wikipedia-open-in-wikiwand │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 4_github-hide-whitespace-changes-in-pull-request │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 5_figma-open-in-figma-app │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 6_google-search-to-youtube │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 7_minecraft-fandom-wiki-to-mincraft-wiki │ ├── cover.webp │ ├── metadata.json │ └── rule-set.json │ ├── 8_DELETED │ └── .gitkeep │ └── 9_terraria-fandom-wiki-to-wiki-gg │ ├── metadata.json │ ├── rule-set.json │ └── screenshot.jpg ├── package-lock.json ├── package.json ├── release-notes-drafts └── 8.0.0.mdx ├── release-notes ├── 7.0.0.mdx ├── 7.11.0.mdx ├── 7.12.0.mdx ├── 7.14.0.mdx ├── 7.15.0.mdx ├── 7.16.0.mdx ├── 7.17.0.mdx ├── 7.17.1.mdx ├── 7.18.0.mdx └── 7.18.1.mdx ├── sidebars.ts ├── src ├── components │ ├── HomepageFeatures │ │ ├── index.tsx │ │ └── styles.module.css │ └── ReleaseNotesList │ │ ├── Header │ │ ├── index.tsx │ │ └── styles.module.css │ │ └── index.tsx ├── css │ └── custom.css └── pages │ └── markdown-page.md ├── static ├── .nojekyll ├── img │ ├── appstore-badge copy.svg │ ├── appstore-badge.svg │ ├── context-menu-redirector.png │ ├── docusaurus-social-card.jpg │ ├── docusaurus.png │ ├── files-share-ios.png │ ├── library-screenshot.webp │ ├── logo.svg │ ├── menubar-file-redirector.png │ ├── menubar-file.png │ ├── multiselect-on-macos.png │ ├── prepareExtensionPermissionAlert@3x.png │ ├── safari-additional-permission-alert.webp │ ├── share-on-macos.png │ ├── share-sheet-ios.png │ ├── undraw_docusaurus_mountain.svg │ ├── undraw_docusaurus_react.svg │ └── undraw_docusaurus_tree.svg ├── misc │ ├── reddit-to-redlib.html │ ├── test.html │ ├── test.js │ └── url-opener.html └── rules │ ├── add-parameters.redirectweb │ ├── reduce-twitter-addiction.redirectweb │ └── remove-parameters.redirectweb └── tsconfig.json /.github/workflows/static.yml: -------------------------------------------------------------------------------- 1 | # Simple workflow for deploying static content to GitHub Pages 2 | name: Deploy static content to Pages 3 | 4 | on: 5 | push: 6 | branches: ["main"] 7 | 8 | workflow_dispatch: 9 | 10 | permissions: 11 | contents: read 12 | pages: write 13 | id-token: write 14 | 15 | concurrency: 16 | group: "pages" 17 | cancel-in-progress: false 18 | 19 | jobs: 20 | deploy: 21 | environment: 22 | name: github-pages 23 | url: ${{ steps.deployment.outputs.page_url }} 24 | runs-on: ubuntu-latest 25 | steps: 26 | - name: Checkout 27 | uses: actions/checkout@v3 28 | - name: Setup Pages 29 | uses: actions/configure-pages@v3 30 | - name: Build Pages 31 | run: ./build.sh 32 | - name: Upload artifact 33 | uses: actions/upload-pages-artifact@v3 34 | with: 35 | path: 'build' 36 | - name: Deploy to GitHub Pages 37 | id: deployment 38 | uses: actions/deploy-pages@v4 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | generated/ 2 | 3 | # Dependencies 4 | /node_modules 5 | 6 | # Production 7 | /build 8 | 9 | # Generated files 10 | .docusaurus 11 | .cache-loader 12 | 13 | # Misc 14 | .DS_Store 15 | .env.local 16 | .env.development.local 17 | .env.test.local 18 | .env.production.local 19 | 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* 23 | 24 | /changelog 25 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing guide 2 | 3 | Thank you for investing your time in contributing to our project! 4 | 5 | ## File structure 6 | 7 | All the contents hosted as [mshibanami.github.io/redirect-web](https://mshibanami.github.io/redirect-web/) are in the [docs](docs) folder. 8 | 9 | Contents of the library available on the app are in [library](library). If you want to modify the contents, please check [README.md in the folder](library/README.md). 10 | 11 | ## Livereload 12 | 13 | The documentation is powered by Docsify, and you can livereload it with their `docsify-cli`. 14 | Please check [their repository](https://github.com/docsifyjs/docsify-cli), and install it. 15 | 16 | Once it's ready, run this command in the repository root: 17 | 18 | ```sh 19 | docsify serve docs/ 20 | ``` 21 | 22 | Livereload makes maintaining the documentation easier. 23 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2024 Manabu Nakazawa (https://github.com/mshibanami) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Redirect Web for Safari 2 | 3 | [![appstore-badge.svg](./static/img/appstore-badge.svg)](https://apps.apple.com/au/app/id1571283503) 4 | 5 | This is a repository for [the support website of Redirect Web](https://mshibanami.github.io/redirect-web). 6 | 7 | In addition, we provides these on GitHub: 8 | 9 | - [Library Contents](./library): The contents shown in the Library section in the app. 10 | - [Issues](https://github.com/mshibanami/RedirectWeb/issues): Report any bugs, request new features, and more. 11 | - [Discussions](https://github.com/mshibanami/RedirectWeb/discussions): Ask any questions and get help from the developer or other users. 12 | 13 | ## Contributing 14 | 15 | See [the contributing guide](CONTRIBUTING.md) for detailed instructions on how to get started with our project. 16 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | cd "$(dirname "${BASH_SOURCE:-$0}")" 6 | 7 | rm -rf build 8 | 9 | npm install 10 | npm run build 11 | 12 | cp -R library build/ 13 | -------------------------------------------------------------------------------- /docs/contact-us.mdx: -------------------------------------------------------------------------------- 1 | # Contact Us 2 | 3 | We're here to help if you have any questions, feedback, or issues with Redirect Web. Here are the best ways to get in touch: 4 | 5 | - **[GitHub Issues](https://github.com/mshibanami/RedirectWeb/issues)**: If you encounter any bugs or want to request new features, please visit the GitHub Issues page. You can browse existing issues, submit a new issue, and track the progress of your issue. 6 | - **[GitHub Discussions](https://github.com/mshibanami/RedirectWeb/discussions)**: If you have any questions or want to get help from the developer or other users, please visit the GitHub Discussions page. You can start a new discussion, join existing discussions, and get help from the community. 7 | - **Feedback Form**: You can send us feedback through the feedback form in the Redirect Web app. This will send an email directly to the developer, so your feedback is private from other users. 8 | 9 | Thank you for using Redirect Web! We appreciate your support and feedback. 10 | -------------------------------------------------------------------------------- /docs/export-or-import-rules.mdx: -------------------------------------------------------------------------------- 1 | # Export/Import Rules 2 | 3 | ## Export Rules 4 | 5 | ### macOS 6 | 7 | Click either the ellipsis button or the Share button as shown in this screenshot: 8 | 9 | ![Share on macOS](/img/share-on-macos.png) 10 | 11 | You can also multi-select your rules and export them by secondary clicking (right-clicking) them on the rule-listing sidebar: 12 | 13 | ![Share multiple rules on macOS](/img/multiselect-on-macos.png) 14 | 15 | In addition, you can export all the rules by the menubar > File > Export All Redirect Rules: 16 | 17 | ![Menubar > File](/img/menubar-file.png) 18 | 19 | If you want to export your rules in the format compatible with [Einar Egilsson's Redirector](https://einaregilsson.com/redirector/), press the Option key (`⌥`) on the context menu or the menubar, then you'll see these: 20 | 21 | ![Menubar > File (Redirector)](/img/menubar-file-redirector.png) 22 | 23 | ![Context Menu (Redirector)](/img/context-menu-redirector.png) 24 | 25 | > [!WARNING] 26 | > Redirect Web is not fully compatible with Redirector, and vise versa. Some settings, such as "Replace Occurrences" for Capturing Group Processing, aren't exported with the Redirector's format. 27 | 28 | ### iOS 29 | 30 | You can export your rules like this: 31 | 32 | 33 | 34 | ## Import Rules 35 | 36 | ### macOS 37 | 38 | - Simply drag and drop the exported rule files to Redirect Web's window. 39 | - Or, you can also import them from the menubar > File > Import Redirect Rules 40 | 41 | ### iOS 42 | 43 | Suppose your rule file is in the Files app. Open it on Files, tap the Share button, and then select Redirect Web: 44 | 45 | | Step 1: Tap the Share button on Files | Step 2: Select Redirect Web | 46 | |-|-| 47 | | ![Alt text](/img/files-share-ios.png) | ![Alt text](/img/share-sheet-ios.png) | 48 | -------------------------------------------------------------------------------- /docs/faq.mdx: -------------------------------------------------------------------------------- 1 | # FAQ 2 | 3 | ## Why should I allow the extension to read my information? 4 | 5 | You may see an alert like this when you set up Redirect Web: 6 | 7 | An permission requiring alert 8 | 9 | > This extension will be able to read and alter webpages and see your browsing history on this website. **This could include sensitive information, including passwords, phone numbers, and credit cards.** 10 | 11 | This extension needs your permission to observe the page navigation to redirect to wherever you want to jump, and Safari displays this alert when the extension requests the related permissions. Therefore, if you don’t allow it, this extension can't work. 12 | 13 | Since we don't collect your personal information as per **[the privacy policy](./privacy-policy)**, we recommend you **always allow** it on **every website** for your convenience. 14 | 15 | But it’s not required. You can only allow it on specific websites. 👌 16 | 17 | ## Why does this extension require a new permission? \{#permission-alert-on-safari} 18 | 19 | You may see this alert in Safari after updating Redirect Web: 20 | 21 | An alert of disabling the app 22 | 23 | > "Redirect Web for Safari" has been updated and is requesting additional permissions. To protect your privacy, this extension has been turned off. 24 | > 25 | > You can turn this extension on in the Extensions section of Safari Settings. 26 | 27 | This is due to the [declarativeNetRequestWithHostAccess](https://developer.apple.com/documentation/safariservices/safari_web_extensions/blocking_content_with_your_safari_web_extension) permission required by the [DNR](./rule-settings#type) type introduced in version 7. Please re-enable the extension. Sorry for the inconvenience. 28 | 29 | ## Will the library's contents become paid in the future? 30 | 31 | No, it's always free. You can also find the source of all the contents [here](https://github.com/mshibanami/redirect-web/tree/main/library). 32 | 33 | ## One-time Purchase or Annual Subscription: Which is Best? 34 | 35 | We recommend the one-time purchase, as the price difference is only US$2.00. 36 | The main reason we offer the subscription is to allow you to try all the features through its free trial. Here is the expected use case: 37 | 38 | 1. Subscribe the annual subscription. 39 | 2. Immediately cancel the subscription by going to the Settings app, searching for "Subscriptions", tapping on this app, and selecting "Cancel Subscription". This lets you enjoy the free trial without any commitment. 40 | 3. Enjoy full access to all features for 7 days. 41 | 4. If you like the features, opt for the one-time purchase. 42 | 43 | Of course, there's nothing wrong with continuing with the annual subscription if you prefer! 44 | 45 | ## Why are the toggles of my redirect rules not changing or immediately reverting back? 46 | 47 | **Edit (2023-09-01)**: We fixed this bug in version 5.0.0 for both iOS and macOS. 48 | 49 | ~~It's a bug. Sorry for the inconvenience. As a workaround, try changing the sorting order of one of your redirect rules and then restoring it to the previous order.~~ 50 | 51 | ## Does Redirect Web inject ads or other unrelated content into websites? 52 | 53 | No, it does not inject any such content. Only code that is necessary to provide the features described in this documentation and on the app page in the App Store is injected into websites on Safari. 54 | 55 | ## Is there any chance Redirect Web could ever be sold to someone else? 56 | 57 | 100% no. Browser extensions wield deep control over your browsing and data, and handing Redirect Web over to another owner would open the door to privacy violations. We’ve seen extensions change hands and then harvest user data or inject ads without warning—that will never happen here. For more on these risks, see Matt Frisbie’s article ["The Ugly Business of Monetizing Browser"](https://mattfrisbie.substack.com/p/the-ugly-business-of-monetizing-browser) and Brian Krebs’ investigation ["Is Your Browser Extension a Botnet Backdoor?"](https://krebsonsecurity.com/2021/03/is-your-browser-extension-a-botnet-backdoor/). 58 | 59 | Redirect Web was built on trust and responsibility. We consider it our duty to keep your information safe, and we refuse to transfer ownership under any circumstances. Redirect Web will always remain in our hands, so you can browse with complete confidence. 60 | -------------------------------------------------------------------------------- /docs/getting-started.mdx: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | This page describes common use cases for creating redirect rules in the Redirect Web app. 4 | 5 | (You can also learn the details of rule settings on the [Rule Settings](./rule-settings) page.) 6 | 7 | 8 | ## Case 1: Open another website 9 | 10 | Suppose you're addicted to Twitter, and you decide to meditate in Insight Timer whenever you accidentally open Twitter. Let's create a rule for that! 11 | 12 | ### Step 1. Set up "Redirect From" 13 | 14 | First, you should set up the *Redirect From* section in the *Edit Rule* screen in the app. The targets are URLs starting with `https://twitter.com/`. 15 | 16 | In this case, you can specify the following pattern with the [Wildcard](rule-settings?id=wildcard) mode: 17 | 18 | ``` 19 | https://twitter.com/* 20 | ``` 21 | 22 | In the Wildcard mode, `*` means it matches anything (= zero or more characters). 23 | 24 | However, hold on. `twitter.com` was renamed to `x.com`. You can simply replace `twitter.com` with `x.com` but no one knows when the new owner will change his mind again to roll it back. Therefore, let's target both `twitter.com` and `x.com`. 25 | 26 | To do that, switch from Wildcard to [Regular Expression](rule-settings?id=regular-expression), and set this as the pattern: 27 | 28 | ``` 29 | https://(twitter|x).com/.* 30 | ``` 31 | 32 | * `(twitter|x)`: it targets both `twitter` and `x`. (`|` is called *a pipe*.) 33 | * `.*`: It's the same as Wildcard's `*`. More specifically, `.` means *any character* and `*` means *anything before this symbol repeated any number of times*, resulting in it matches anything. 34 | 35 | Regular Expression is a bit complicated, but once you get used to it, it will be a powerful tool. We recommend using [RegExr](https://regexr.com) as a playground to analyze how your Regular Expression pattern works. 36 | 37 | > [!NOTE] 38 | > In Regular Expressions, `.` in `(twitter|x).com` is also treated as *any character*. Therefore, `(twitter|x).com/.*` also matches, for example, `twitter1com/` or `x_com/`. 39 | > 40 | > To avoid it, you can change it to `(twitter|x)\.com/.*`. `\` is used to escape a special character. 41 | > 42 | > However, there are no such URLs in the general internet environment. Therefore, you can leave `.` as a special character if you prefer. Your rule is for your own use, so implement it as you see fit. 43 | 44 | ### Step 2: Set up "Redirect To" 45 | 46 | Simply specify the URL as follows: 47 | 48 | ``` 49 | https://insighttimer.com/saraauster/guided-meditations/calm 50 | ``` 51 | 52 | Now, Redirect Web brings you to the meditation when you access Twitter! 53 | 54 | **[⬇️ Download the Rule](/rules/reduce-twitter-addiction.redirectweb)** 55 | 56 | ## Case 2: Remove Query Parameters from URL 57 | 58 | Suppose there is a query parameter `source=twitter` in a URL of `example.com`, and you decided to remove it to anonymize yourself. 59 | 60 | In this case, the **Capturing Group Processing** option is the easiest way.: 61 | 62 | * **Redirect From**: `https://example.com/*` (Wildcard) 63 | * **Redirect To**: `$0` 64 | * **Capturing Group Processing**: 65 | * **Group**: `$0` 66 | * **Process**: Replace Occurrences 67 | * **Target**: `&?source=[^&]*` 68 | * **Replacement**: *(none)* 69 | * **Text Pattern**: Regular Expression 70 | 71 | **[⬇️ Download the Rule](/rules/remove-parameters.redirectweb)** 72 | 73 | This rule works as follows: 74 | 75 | ``` 76 | https://example.com/?source=twitter 77 | ↪ https://example.com/? 78 | 79 | https://example.com/?hello=world&source=twitter&foo=bar 80 | ↪ https://example.com/?hello=world&foo=bar 81 | ``` 82 | 83 | If you want to remove more parameters, add more processes. 84 | 85 | ## Case 3: Add Query Parameters to URL 86 | 87 | Let's say there is a website called `example.com` that shows a mobile layout by default, but you prefer their desktop layout. Fortunately, the website supports a `layout` query parameter to specify which layout the website displays. Let's create a rule that adds `layout=desktop` automatically. 88 | 89 | Perhaps you think you could define it as follows: 90 | 91 | * **Redirect From**: `https://example.com/.*` (Regular Expression) 92 | * **Redirect To**: `$0?layout=desktop` 93 | 94 | `$0` references the target URL. If you try to access `example.com/hello`, you're redirected to `example.com/hello?layout=desktop`. This feature is called *substitution*. 95 | 96 | > [!TIP] 97 | > Substitution is also available for the Wildcard mode since it's internally converted to Regular Expression. 98 | 99 | However, there are a few problems with these settings. 100 | 101 | ### Problem 1: Infinite loop 102 | 103 | The current setting creates an infinite redirect loop since `https://example.com/.*` also targets `https://example.com/hello?layout=desktop`. 104 | 105 | In this case, you can specify an excluded URL pattern that allows you to access without redirection, like this with Regular Expression: 106 | 107 | ``` 108 | .*[&?]layout=[^&]*.* 109 | ``` 110 | 111 | * `.*`: Matches anything 112 | * `[&?]`: Matches either `&` or `?` 113 | * `[^&]*`: Matches anything except `&` 114 | 115 | ### Problem 2: Can't handle existing parameters properly 116 | 117 | If the target URL already has other query parameters like `example.com/hello?theme=dark`, the destination will be `example.com/hello?theme=dark?layout=desktop` (There are two `?` in the URL) but you can only join the parameters with `&`. `?` as a special character is only allowed at the beginning of the parameters. So it's not treated as a valid parameter. 118 | 119 | In this case, change the settings like this: 120 | 121 | * **Redirect From**: `(https://example.com/[^?]*)(\?(.*))?` 122 | * **Redirect To**: `$1?layout=desktop&$3` 123 | 124 | Let's take a look step by step. 125 | 126 | * `(https://example.com/[^?]*)`: Matches the part until the previous character of `?`. 127 | * `[^?]*` matches anything except `?`. 128 | * This is wrapped with `()` so you can reference it with `$1` later. 129 | * `(\?(.*))?`: Matches a string start with `?`, which means query parameters. 130 | * This also matches empty string by the `?` quantifier at the end of the pattern, which *matches zero or one time*. 131 | * The outer `()` and the inner `()` can be referenced with `$2` and `$3` later. 132 | 133 | [RegExr](https://regexr.com) may help you understand the details. 134 | 135 | > [!NOTE] 136 | > RegExr shows an error when you don't escape `/` with `\`. Although you can escape it, it's not required since Redirect Web uses a different engine by Apple that doesn't require escaping. 137 | 138 | This is not a perfect solution, as it redirects `example.com/hello` to `example.com/hello?layout=desktop&`, which includes an unnecessary `&` at the end of the URL. It's not a big deal in general, but if you wish to remove it, you can use *Capturing Group Processing*. 139 | 140 | In conclusion, this is the final output: 141 | 142 | * **Redirect From**: `(https://example.com/[^?]*)((\?(.*))?)` (Regular Expression) 143 | * **Redirect To**: `$1?layout=desktop$3` 144 | * **Excluded URL Pattern**: `.*[&?]layout=[^&]*.*` (Regular Expression) 145 | * **Capturing Group Processing**: 146 | * **Group**: `$3` 147 | * **Process**: Replace Occurrences 148 | * **Target**: `\?(.*)` 149 | * **Replacement**: `&$1` 150 | 151 | **[⬇️ Download the Rule](/rules/add-parameters.redirectweb)** 152 | 153 | This is merely an example. You can also create multiple rules to handle each problem. It can be much simpler. 154 | -------------------------------------------------------------------------------- /docs/introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | slug: / 3 | --- 4 | 5 | # Introduction 6 | 7 | [![appstore-badge.svg](/img/appstore-badge.svg)](https://apps.apple.com/au/app/id1571283503) 8 | 9 | Welcome to the support website for Redirect Web, a Safari extension for iOS and macOS. 10 | 11 | This extension lets you set up redirect rules to jump to a specific website from another website. With Redirect Web, you can save time by automatically redirecting to your preferred websites, without the need to manually type the URLs or navigate through multiple pages. 12 | 13 | These are the basic usages of the iOS app and the macOS app: 14 | 15 | 16 | 17 | 18 | 19 | ## Use Cases 20 | 21 | For example, you can create these rules: 22 | 23 | - Remove unneeded parameters from a URL 24 | - Open a Google Meet link on Google Chrome 25 | - Open a Notion's link on the Notion app 26 | 27 | You can find useful rules in these: 28 | 29 | - [Library](library): This offers you many useful pre-defined rules you can easily get by tapping a Get button. 30 | - [GitHub Discussions](https://github.com/mshibanami/redirect-web/discussions/categories/redirect-rules): A community forum where the users can share their rules with others. 31 | 32 | ## Features 33 | 34 | Redirect Web comes with the following features: 35 | 36 | - Create redirect rules using Regular Expression or Wildcard pattern types 37 | - Use back-referencing to specify dynamic target URLs 38 | - Exclude URLs from redirection 39 | - Process captured text using URL encoding/decoding, base64 encoding/decoding, or replacing occurrences 40 | 41 | In addition, you can unlock the following features through either a subscription or a one-time purchase: 42 | 43 | - Enabling 2 or more redirect rules 44 | - Syncing redirect rules with your other Mac, iPhone, and iPad via iCloud 45 | 46 | Purchasing the app also supports us in maintaining Redirect Web. 😃 47 | 48 | Your purchase made on your iOS device can be used on your Mac and vice versa. 49 | 50 | --- 51 | 52 | We hope you find Redirect Web helpful in saving you time and simplifying your browsing experience. 53 | 54 | If you have any questions, feedback, or issues, please don't hesitate to [contact us](contact-us). 55 | -------------------------------------------------------------------------------- /docs/library.mdx: -------------------------------------------------------------------------------- 1 | # Library 2 | 3 | ![Library Screenshot](/img/library-screenshot.webp) 4 | 5 | Welcome to our library, where you can get redirect rules for free! 6 | 7 | The library can be accessed through the Redirect Web app, as long as it's version 6.0.0 or higher. 8 | 9 | ## Add Rules to Library 10 | 11 | The current library has only a few rules, so we appreciate your contribution! 12 | 13 | There are 2 options to add your rules to the library: 14 | 15 | ### Option 1: Send a Pull Request 16 | 17 | You can send a pull request to the repository. To do that, you need to know which files to add to the repository. Please check [the instructions](https://github.com/mshibanami/redirect-web/blob/main/library/README.md) for details. 18 | 19 | ### Option 2: Post a Rule on the Forum 20 | 21 | Share your redirect rule with other users on [the forum](https://github.com/mshibanami/redirect-web/discussions/categories/redirect-rules). Then we may request if we could put your rule in the library as well. 22 | 23 | This might be easier than sending a pull request since you can leave it to us to add. 24 | 25 | ## Other Information 26 | 27 | - You can see all the contents in [the repository on GitHub](https://github.com/mshibanami/redirect-web/tree/main/library). 28 | - We host our private API server on Cloudflare for the library contents, enabling ust to provide filtering and other services. The app fetches the library contents from this server. As stated in our [our privacy policy](/privacy-policy), This server does not collect your personal information. 29 | -------------------------------------------------------------------------------- /docs/privacy-policy.mdx: -------------------------------------------------------------------------------- 1 | # Privacy Policy 2 | 3 | **Redirect Web for Safari** does not collect your personal information. 4 | 5 | **Personal information** is information or an opinion about an identified individual or an individual who is reasonably identifiable. 6 | 7 | **Redirect Web for Safari** stores your redirect settings in your computer. Also, it may store your redirect settings in your private database on Apple's iCloud. It's only for the data sync feature. 8 | -------------------------------------------------------------------------------- /docs/rule-settings.mdx: -------------------------------------------------------------------------------- 1 | # Rule Settings 2 | 3 | This page provides detailed information on how to set up redirect rules using Redirect Web. 4 | 5 | ## Options 6 | 7 | ### Type 8 | 9 | Specify the **Type** option to control how the app handles redirection. You can choose from these: 10 | 11 | * **Original** (Default) 12 | * This uses traditional Web APIs to control redirection. Additionally, it uses [the Tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) for a fallback. 13 | * You can use all the options other than [Resource Types](#resource-types) and [Request Methods](#request-methods). 14 | * This is slower than the *Declarative* type and may cause extra network requests. 15 | * **DNR** (Experimental): 16 | * This allows you to specify [Resource Types](#resource-types) ~~and [Request Methods](#request-methods)~~. 17 | * This type works much faster than the Original type because it doesn't initiate a network request for the source URL. 18 | * ⚠️ If you update Redirect Web to version 7 or later, you may see an alert in Safari that disables the extension due to a new permission request for this type. [Details](/faq#permission-alert-on-safari) 19 | * ⚠️ You can't use some options, such as [Capturing Group Processing](#capturing-group-processing) and [Excluded URL Patterns](#excluded-url-patterns). 20 | * ⚠️ Currently, you can't include pipes (`|`) in your Regular Expression pattern. [Details](https://github.com/mshibanami/redirect-web/issues/44) 21 | * ⚠️ Since the DNR API still has some issues, we consider that is still an experimental feature. You can find the list of all the known issues [here](https://github.com/mshibanami/redirect-web/labels/DNR). 22 | 23 | ### Redirect From 24 | 25 | The **Redirect From** option allows you to specify a URL pattern of web pages you want to redirect from. You can choose either Wildcard or Regular Expression. 26 | 27 | For example, if you specify `https://example.com/*` with Wildcard, it matches `https://example.com/` or `https://example.com/hello`. 28 | 29 | > [!NOTE] 30 | > In the Redirect To option, You can reference the entire match using `$0` or partial matches using `$1`, `$2`, ... Check the details in [URL Pattern](#url-pattern) on this page. 31 | 32 | #### Resource Types 33 | 34 | ![Supported Types: DNR](https://img.shields.io/badge/Types-DNR-blue) 35 | 36 | The **Resource Types** option lets you specify the categories of web requests, such as images, JavaScripts, and style sheets, to which the rule applies. 37 | For example, if you set `script`, you can redirect the JavaScript files loaded by web pages. 38 | 39 | Currently, these are available: 40 | `main_frame`, `sub_frame`, `stylesheet`, `script`, `image`, `font`, `xmlhttprequest`, `ping`, `media`, `websocket`, `other` 41 | 42 | The default setting is `main_frame`, which is the top-level page loaded into a tab. 43 | 44 | Please check the details of each resource type in [mdn web docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest/ResourceType). 45 | 46 | #### Request Methods 47 | 48 | ![Supported Types: DNR](https://img.shields.io/badge/Types-DNR-blue) 49 | 50 | ~~The **Request Methods** option lets you set the target HTTP methods of the source URL.~~ 51 | 52 | ~~All methods are set by default.~~ 53 | 54 | ~~Please check the details of each method in [mdn web docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods).~~ 55 | 56 | > [!WARNING] 57 | > This option is currently not available because Apple's implementation for the DNR type doesn't seem to handle it currently. We sent feedback to Apple as FB14502272. 58 | 59 | ### Redirect To 60 | 61 | The **Redirect To** option specifies a destination URL you wish to redirect to, from the source URL matched with the *Redirect From* option. You can also substitute capturing groups with `$1`, `$2`, ... or the entire match with `$0`. These help you dynamically specify the destination. Check the details in [URL Pattern](#url-pattern) in this page. 62 | 63 | For example, if you set the following rule: 64 | 65 | * **Redirect From**: `https://google.com/*` (Wildcard) 66 | * **Redirect To**: `https://apple.com/$1` 67 | 68 | and it matches `https://google.com/hello`, then the destination URL will be `https://apple.com/hello`. 69 | 70 | Additionally, You can modify the texts of `$1`, `$2`, ... before making substitutions. Check the [Capturing Group Processing](#capturing-group-processing) section for the details. 71 | 72 | > [!TIP] 73 | > You can specify a custom URL scheme to open an app. These are examples of apps that support deep linking: 74 | > 75 | > * Figma: `figma://file/Your_Figma_ID` 76 | > * Firefox: `firefox://open-url?url=https://example.com/hello` 77 | > * Google Chrome: `googlechromes://example.com` 78 | > * Microsoft Edge: `microsoft-edge://example.com` 79 | > * Notion: `notion://www.notion.so/Your_Note_ID` 80 | > * Slack: `slack://open` 81 | 82 | #### Application 83 | 84 | ![Supported Types: Original](https://img.shields.io/badge/Types-Original-blue) ![Supported Platforms: macOS](https://img.shields.io/badge/Platforms-macOS-white) 85 | 86 | If you want to specify an app you wish to open the destination URL, use the **Application** combo box. This is only available on macOS. 87 | 88 | > [!WARNING] 89 | > You can only open an app that supports [App Sandbox](https://developer.apple.com/documentation/security/app_sandbox). Also, make sure that the app supports opening the URL you want to open. 90 | 91 | ### Capturing Group Processing 92 | 93 | ![Supported Types: Original](https://img.shields.io/badge/Types-Original-blue) 94 | 95 | The **Capturing Group Processing** option allows you to specify how to process the captured groups you can substitute in the *Redirect To* option with `$1`, `$2`... 96 | 97 | These are how to make capturing groups: 98 | 99 | * **Wildcard**: Texts matched with `*` and `?` are automatically captured. 100 | * **Regular Expression**: Texts matched with part of the pattern inside `()` are captured. 101 | 102 | You can choose one or more of the following processes: 103 | 104 | * **URL Encode/Decode**: This applies [percent-encoding](https://en.wikipedia.org/wiki/Percent-encoding) or decoding to a capturing group. For example, if you encode `https://example.com/hello`, it's converted to `https%3A%2F%2Fexample.com%2Fhello`. Decode works in an opposite way. 105 | * **Base64 Encode/Decode**: This decode/encode a text into [Base64](https://en.wikipedia.org/wiki/Base64). For example, you can encode `hello` to `aGVsbG8=`, and decode it back to `hello`. 106 | * **Replace Occurrences**: This replaces one or more characters in a group, matched by a **Target**, with a **Replacement**. For example, if the *Group* is `hello` and the *Target* is `l` and the Replacement is `y`, it is modified to `heyyo`. 107 | 108 | > [!NOTE] 109 | > This is for processing each capturing group and it doesn't affect which URLs are excluded by the [Excluded URL Patterns](#excluded-url-patterns). For instance, let's say you have this rule: 110 | > 111 | > * **Redirect From**: `https://example.com/(hello.*)` 112 | > * **Capturing Group Processing**: 113 | > * Group: `$1` 114 | > * Target: `.*` (Regular Expression) 115 | > * Replacement: `hello` 116 | > * **Excluded URL Pattern**: `https://example.com/hello` 117 | > 118 | > In this case, `https://example.com/hello_world` will not be excluded while `https://example.com/hello` will be excluded. 119 | 120 | ### Excluded URL Patterns 121 | 122 | ![Supported Types: Original](https://img.shields.io/badge/Types-Original-blue) 123 | 124 | The **Excluded URL Patterns** option allows you to specify the URLs that are not redirected. This can be useful to avoid redirect loops or to exclude certain parts of a website from being redirected. 125 | 126 | You can specify excluded URL patterns using either Regular Expression or Wildcard pattern types. 127 | 128 | ### Examples 129 | 130 | The **Examples** option allows you to test your redirect rule by providing sample URLs. By adding a sample URL, you can check if the rule works as expected before actually applying it. 131 | 132 | ### Comments 133 | 134 | The **Comments** option allows you to add any notes or comments about your redirect rule. This can be useful for keeping track of why you created a specific rule or for providing context for others who might view your rules. 135 | 136 | ## URL Pattern 137 | 138 | There are 3 options you can specify one or more URL patterns. *Redirect From*, *Excluded URL Patterns* and *Capturing Group Processing*. To specify them, you can choose either **Wildcard** or **Regular Expression**. 139 | 140 | ### Wildcard 141 | 142 | **Wildcard** is a simpler pattern type that allows you to use `*` (matches anything) and `?` (matches any single character) as wildcards. Here are some examples: 143 | 144 | * To match `https://example.com/hello`, you can use `https://example.com/*`. This will match any string after `https://example.com/`. 145 | * To match `https://example.com/search?q=hello`, you can use `https://example.com/search?q=*`. This will match any value for the `q` parameter. 146 | * To match any URL that contains the word `blog`, you can use `*blog*`. 147 | 148 | You can also use substitution in Wildcard as well, which means you can reference portions of the matched URL using `$1`, `$2`, etc. For example, if you use `https://example.com/*-world-*`, and the URL is `https://example.com/hello-world-goodbye`, then `$1` would be "hello" and `$2` would be "goodbye". `$0` is also available to reference the entire URL matched. 149 | 150 | > [!Note] 151 | > Although substitution is a feature of Regular Expression, you can also use it for Wildcard because Redirect Web internally converts Wildcard to Regular Expression. 152 | 153 | ### Regular Expression 154 | 155 | **Regular Expression** (Regex) is a powerful tool for matching patterns in text, powered by Apple's regular expression engine which is described [here](https://developer.apple.com/documentation/foundation/nsregularexpression#1661042). It allows you to define a specific pattern that matches a set of strings. Here are some examples. 156 | 157 | - To match `https://example.com/hello`, you can use `https://example.com/(.*)`. This will match any string after `https://example.com/` and store it in a capturing group. 158 | - To match `https://example.com/search?q=hello`, you can use `https://example.com/search\?q=(.*)`. This will match the value of the `q` parameter and store it in a capturing group. 159 | - To match any URL that contains the word `blog`, you can use `.*blog.*`. 160 | 161 | You can reference the capturing groups in *Redirect To* or *Replacement* using `$1`, `$2`, ... or `$0` to reference the entire match. 162 | 163 | You can learn more about Regex syntax in resources like [RegExr](https://regexr.com/). 164 | -------------------------------------------------------------------------------- /docs/terms-of-use.mdx: -------------------------------------------------------------------------------- 1 | # Terms of Use 2 | 3 | Effective Date: September, 2021. 4 | 5 | ## Introduction and Overview 6 | 7 | These Terms of Use ("Terms") set forth a legally binding agreement between you and Manabu Nakazawa (Founder and Developer of **Redirect Web for Safari**)), and govern your use of any online service location that posts a link to these Terms, and all features, content, and other services that we own, control and make available through such online service location (collectively, the "Service"). 8 | 9 | In some instances, both these Terms and separate terms elsewhere on the Service will apply to your use of the Service ("Additional Terms"). To the extent there is a conflict between these Terms and any applicable Additional Terms, the Additional Terms will control unless they expressly state otherwise. 10 | 11 | By using the Service, you agree to these Terms, and consent to our collection, use and disclosure practices, and other activities as described in our Privacy Policy. If you do not agree and consent, discontinue use of the Service. 12 | 13 | ## Changes to these Terms 14 | 15 | We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature or for some other reason. 16 | 17 | Whenever we make changes to these Terms, the changes are effective 7 days after we post such revised Terms (indicated by revising the date at the top of these Terms) or upon your acceptance if we provide a mechanism for your immediate acceptance of the revised Terms (such as a click-through confirmation or acceptance button). It is your responsibility to check **Redirect Web for Safari** for changes to these Terms. 18 | 19 | If you continue to use the Service after the revised Terms go into effect, then you have accepted the changes to these Terms. 20 | 21 | ## Third-Party Services 22 | 23 | From time to time, we may provide you with links to third party websites or services that we do not own or control. Your use of the Service may also include the use of applications that are developed or owned by a third party. Your use of such third party applications, websites, and services is governed by that party's own terms of service or privacy policies. We encourage you to read the terms and conditions and privacy policy of any third party application, website or service that you visit or use. 24 | 25 | ## Creating Accounts 26 | 27 | When you create an account or use another service to log in to the Service, you agree to maintain the security of your password and accept all risks of unauthorized access to any data or other information you provide to the Service. 28 | 29 | If you discover or suspect any Service security breaches, please let us know as soon as possible. 30 | 31 | ## Your Content & Conduct 32 | 33 | Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness. 34 | 35 | When you post, link or otherwise make available content to the Service, you grant us the right and license to use, reproduce, modify, publicly perform, publicly display and distribute your content on or through the Service. We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. 36 | 37 | Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service. 38 | 39 | You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. We will retain web server access logs for a maximum of 180 days and then delete them. 40 | 41 | You may not post, link and otherwise make available on or through the Service any of the following: 42 | 43 | * Content that is libelous, defamatory, bigoted, fraudulent or deceptive; 44 | * Content that is illegal or unlawful, that would otherwise create liability; 45 | * Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party; 46 | * Mass or repeated promotions, political campaigning or commercial messages directed at users who do not follow you (SPAM); 47 | * Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and 48 | * Viruses, corrupted data or other harmful, disruptive or destructive files or code. 49 | 50 | Also, you agree that you will not do any of the following in connection with the Service or other users: 51 | 52 | * Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service; 53 | * Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity; 54 | * Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service; 55 | * Create an account or post any content if you are not over 13 years of age years of age; and 56 | * Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties. 57 | 58 | ## Manabu Nakazawa Materials 59 | 60 | We put a lot of effort into creating the Service including, the logo and all designs, text, graphics, pictures, information and other content (excluding your content). This property is owned by us or our licensors and it is protected by Australia and international copyright laws. We grant you the right to use it. 61 | 62 | However, unless we expressly state otherwise, your rights do not include: (i) publicly performing or publicly displaying the Service; (ii) modifying or otherwise making any derivative uses of the Service or any portion thereof; (iii) using any data mining, robots or similar data gathering or extraction methods; (iv) downloading (other than page caching) of any portion of the Service or any information contained therein; (v) reverse engineering or accessing the Service in order to build a competitive product or service; or (vi) using the Service other than for its intended purposes. If you do any of this stuff, we may terminate your use of the Service. 63 | 64 | ## Hyperlinks and Third Party Content 65 | 66 | You may create a hyperlink to the Service. But, you may not use, frame or utilize framing techniques to enclose any of our trademarks, logos or other proprietary information without our express written consent. 67 | 68 | Manabu Nakazawa makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. 69 | 70 | If there is any content on the Service from you and others, we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content. 71 | 72 | ## Unavoidable Legal Stuff 73 | 74 | THE SERVICE AND ANY OTHER SERVICE AND CONTENT INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THE SERVICE ARE PROVIDED TO YOU ON AN AS IS OR AS AVAILABLE BASIS WITHOUT ANY REPRESENTATIONS OR WARRANTIES OF ANY KIND. WE DISCLAIM ANY AND ALL WARRANTIES AND REPRESENTATIONS (EXPRESS OR IMPLIED, ORAL OR WRITTEN) WITH RESPECT TO THE SERVICE AND CONTENT INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THE SERVICE WHETHER ALLEGED TO ARISE BY OPERATION OF LAW, BY REASON OF CUSTOM OR USAGE IN THE TRADE, BY COURSE OF DEALING OR OTHERWISE. 75 | 76 | IN NO EVENT WILL MANABU NAKAZAWA BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY SPECIAL, INDIRECT, INCIDENTAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES OF ANY KIND ARISING OUT OF OR IN CONNECTION WITH THE SERVICE OR ANY OTHER SERVICE AND/OR CONTENT INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THE SERVICE, REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT, STRICT LIABILITY OR OTHERWISE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR ARE AWARE OF THE POSSIBILITY OF SUCH DAMAGES. OUR TOTAL LIABILITY FOR ALL CAUSES OF ACTION AND UNDER ALL THEORIES OF LIABILITY WILL BE LIMITED TO THE AMOUNT YOU PAID TO MANABU NAKAZAWA. THIS SECTION WILL BE GIVEN FULL EFFECT EVEN IF ANY REMEDY SPECIFIED IN THIS AGREEMENT IS DEEMED TO HAVE FAILED OF ITS ESSENTIAL PURPOSE. 77 | 78 | You agree to defend, indemnify and hold us harmless from and against any and all costs, damages, liabilities, and expenses (including attorneys' fees, costs, penalties, interest and disbursements) we incur in relation to, arising from, or for the purpose of avoiding, any claim or demand from a third party relating to your use of the Service or the use of the Service by any person using your account, including any claim that your use of the Service violates any applicable law or regulation, or the rights of any third party, and/or your violation of these Terms. 79 | 80 | ## Copyright Complaints 81 | 82 | We take intellectual property rights seriously. In accordance with the Copyright Act 1968 and other applicable law, we have adopted a policy of terminating, in appropriate circumstances and, at our sole discretion, access to the service for users who are deemed to be repeat infringers. 83 | 84 | ## Governing Law 85 | 86 | The validity of these Terms and the rights, obligations, and relations of the parties under these Terms will be construed and determined under and in accordance with the laws of the State of New South Wales, without regard to conflicts of law principles. 87 | 88 | ## Jurisdiction 89 | 90 | You expressly agree that exclusive jurisdiction for any dispute with the Service or relating to your use of it, resides in the courts of the the State of New South Wales and you further agree and expressly consent to the exercise of personal jurisdiction in the courts of the the State of New South Wales located in Sydney in connection with any such dispute including any claim involving Service. You further agree that you and Service will not commence against the other a class action, class arbitration or other representative action or proceeding. 91 | 92 | ## Termination 93 | 94 | If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service. 95 | 96 | ## Entire Agreement 97 | 98 | These Terms constitute the entire agreement between you and Manabu Nakazawa regarding the use of the Service, superseding any prior agreements between you and Manabu Nakazawa relating to your use of the Service. 99 | 100 | ## Feedback 101 | 102 | Please let us know what you think of the Service, these Terms and, in general, **Redirect Web for Safari**. When you provide us with any feedback, comments or suggestions about the Service, these Terms and, in general, **Redirect Web for Safari**, you irrevocably assign to us all of your right, title and interest in and to your feedback, comments and suggestions. 103 | 104 | ## Questions & Contact Information 105 | 106 | Questions or comments about the Service may be directed to us at the email address **mshibanami+redirectweb@gmail.com**. 107 | -------------------------------------------------------------------------------- /docusaurus.config.ts: -------------------------------------------------------------------------------- 1 | import { themes as prismThemes } from 'prism-react-renderer'; 2 | import type { Config } from '@docusaurus/types'; 3 | import type * as Preset from '@docusaurus/preset-classic'; 4 | import remarkGithubAdmonitionsToDirectives from "remark-github-admonitions-to-directives"; 5 | 6 | const projectName = 'redirect-web'; 7 | 8 | const config: Config = { 9 | title: 'Redirect Web', 10 | tagline: 'Redirect any website', 11 | 12 | url: 'https://mshibanami.github.io/', 13 | baseUrl: `/${projectName}/`, 14 | 15 | organizationName: 'mshibanami', 16 | projectName: projectName, 17 | 18 | onBrokenLinks: 'throw', 19 | onBrokenMarkdownLinks: 'warn', 20 | 21 | i18n: { 22 | defaultLocale: 'en', 23 | locales: ['en'], 24 | }, 25 | 26 | presets: [ 27 | [ 28 | 'classic', 29 | { 30 | docs: { 31 | routeBasePath: '/', 32 | sidebarPath: './sidebars.ts', 33 | sidebarCollapsible: false, 34 | beforeDefaultRemarkPlugins: [remarkGithubAdmonitionsToDirectives], 35 | }, 36 | blog: { 37 | path: 'release-notes', 38 | routeBasePath: '/release-notes', 39 | blogSidebarTitle: 'Release Notes', 40 | blogTitle: 'Release Notes', 41 | blogSidebarCount: 'ALL', 42 | blogDescription: 'Release notes for Redirect Web.', 43 | blogListComponent: '@site/src/components/ReleaseNotesList', 44 | showReadingTime: false, 45 | feedOptions: { 46 | type: ['rss', 'atom', 'json'], 47 | title: 'Redirect Web Release Notes', 48 | description: 'An RSS feed of changelogs for Redirect Web', 49 | language: 'en', 50 | }, 51 | }, 52 | theme: { 53 | customCss: './src/css/custom.css', 54 | }, 55 | } satisfies Preset.Options, 56 | ], 57 | ], 58 | themeConfig: { 59 | // Replace with your project's social card 60 | image: 'img/docusaurus-social-card.jpg', 61 | colorMode: { 62 | disableSwitch: false, 63 | respectPrefersColorScheme: true, 64 | }, 65 | navbar: { 66 | title: 'Redirect Web', 67 | logo: { 68 | alt: 'Site Logo', 69 | src: 'img/logo.svg', 70 | }, 71 | items: [ 72 | { to: '/', label: 'Docs', position: 'left', activeBaseRegex: `^/${projectName}/(?!release-notes).*` }, 73 | { to: '/release-notes', label: 'Release Notes', position: 'left', activeBaseRegex: `^/${projectName}/release-notes/?.*` }, 74 | { 75 | href: 'https://github.com/mshibanami/redirect-web', 76 | label: 'GitHub', 77 | position: 'right', 78 | }, 79 | ], 80 | }, 81 | footer: { 82 | style: 'dark', 83 | copyright: `© ${new Date().getFullYear()} Manabu Nakazawa`, 84 | }, 85 | prism: { 86 | theme: prismThemes.github, 87 | darkTheme: prismThemes.dracula, 88 | }, 89 | } satisfies Preset.ThemeConfig, 90 | }; 91 | 92 | export default config; 93 | -------------------------------------------------------------------------------- /library/README.md: -------------------------------------------------------------------------------- 1 | # Library 2 | 3 | ![Library Screenshot](../static/img/library-screenshot.webp) 4 | 5 | The library is shown in the Redirect Web apps and the data under this `library` folder may be used in the app. 6 | 7 | ## Rule Sets 8 | 9 | Rule sets within the library are managed at the [rule-sets](rule-sets) folder. 10 | 11 | Each rule is identified by a unique integer ID. All data in a rule set should be in a folder named `{id}_{short-title-of-rule-set}`. This folder should contain: 12 | 13 | - `rule-set.json` 14 | - `metadata.json` 15 | - Image files (optional) 16 | 17 | Folders of deleted rule sets remain like `8_DELETED`, ensuring that IDs remain unique. 18 | 19 | You can submit a pull request to add your rule to the library. 20 | 21 | > [!WARNING] 22 | > Old rules will persist in the Git history, although you can modify or remove your rules after creation. 23 | 24 | ### `rule-set.json` 25 | 26 | This file defines a rule set containing one or more rules. It's essentially equivalent to the `redirectweb` file you can get by exporting your rules from the Redirect Web apps. 27 | 28 | > [!NOTE] 29 | > The file extension is `json` because it's easier to browse on GitHub. 30 | 31 | Below is an example of `rule-set.json` that configures Google Meet links to open in Google Chrome: 32 | 33 | ```json 34 | { 35 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 36 | "kind": "RedirectList", 37 | "redirects": [ 38 | { 39 | "appURL": "file:\/\/\/Applications\/Google%20Chrome.app", 40 | "comments": "This is a rule to open Google Meet links in Google Chrome automatically.", 41 | "destinationURLPattern": "$0", 42 | "exampleURLs": [ 43 | "https:\/\/meet.google.com\/xxx-yyyy-zzz" 44 | ], 45 | "kind": "Redirect", 46 | "sourceURLPattern": { 47 | "type": "regularExpression", 48 | "value": "https:\/\/meet.google.com\/[a-z]*-[a-z]*-[a-z]*" 49 | }, 50 | "title": "Google Meet: Open in Chrome" 51 | } 52 | ] 53 | } 54 | ``` 55 | 56 | ### `metadata.json` 57 | 58 | This file contains metadata of a rule set. 59 | 60 | ```json 61 | { 62 | "contributorGitHubIds": [ 63 | "" 64 | ], 65 | "imageFiles": [ 66 | "image.png" 67 | ], 68 | "aboutUrl": "", 69 | "title": "", 70 | "description": "", 71 | "primaryCategoryId": "gaming", 72 | "secondaryCategoryId": "productivity", 73 | "supportedDeviceTypes": ["desktop", "tablet"] 74 | } 75 | ``` 76 | 77 | - `contributorGitHubIds`: An array of contributors' GitHub IDs, sorted by the date they were involved in the rule. 78 | - `imageFiles`:An array of image files of the rule set. 79 | - JPEG, PNG, and WebP are supported. 80 | - The recommended image size is under 1MB with 16:10 aspect ratio, but it's just a recommendation. There are no strict rules. 81 | - `aboutUrl` (optional): A link to a web page where users can learn more about the rule set. 82 | - `title` (optional): A short title of the rule set. This is optional when the first rule in the rule set has non-empty `title`. 83 | - `description` (optional): A description of the rule set. This is optional when the first rule in the rule set has non-empty `comments`. 84 | - `primaryCategoryId`: A primary category ID of the rule set. Find a list of the categories in [categories.json](./categories.json). 85 | - `secondaryCategoryId` (optional): A secondary category ID of the rule set. 86 | - `supportedDeviceTypes` (optional): An array of device types that support the rule set. 87 | - `desktop`, `tablet` and `phone` are available. 88 | - All devices are supported by default. 89 | -------------------------------------------------------------------------------- /library/categories.json: -------------------------------------------------------------------------------- 1 | { 2 | "categories": [ 3 | { 4 | "id": "social_media", 5 | "name": "Social Media", 6 | "emoji": "👍" 7 | }, 8 | { 9 | "id": "search", 10 | "name": "Search", 11 | "emoji": "🔍" 12 | }, 13 | { 14 | "id": "science_and_education", 15 | "name": "Science & Education", 16 | "emoji": "🔬" 17 | }, 18 | { 19 | "id": "reference", 20 | "name": "Reference", 21 | "emoji": "📖" 22 | }, 23 | { 24 | "id": "productivity", 25 | "name": "Productivity", 26 | "emoji": "🧠" 27 | }, 28 | { 29 | "id": "software_development", 30 | "name": "Software Development", 31 | "emoji": "💻" 32 | }, 33 | { 34 | "id": "arts_and_entertainment", 35 | "name": "Arts & Entertainment", 36 | "emoji": "🎨" 37 | }, 38 | { 39 | "id": "shopping", 40 | "name": "Shopping", 41 | "emoji": "👜" 42 | }, 43 | { 44 | "id": "health", 45 | "name": "Health", 46 | "emoji": "💪" 47 | }, 48 | { 49 | "id": "news", 50 | "name": "News", 51 | "emoji": "🗞️" 52 | }, 53 | { 54 | "id": "finance", 55 | "name": "Finance", 56 | "emoji": "📈" 57 | }, 58 | { 59 | "id": "business", 60 | "name": "Business", 61 | "emoji": "📊" 62 | }, 63 | { 64 | "id": "government", 65 | "name": "Government", 66 | "emoji": "🏢" 67 | }, 68 | { 69 | "id": "sports", 70 | "name": "Sports", 71 | "emoji": "⚽️" 72 | }, 73 | { 74 | "id": "lifestyle", 75 | "name": "Lifestyle", 76 | "emoji": "🌇" 77 | }, 78 | { 79 | "id": "legal", 80 | "name": "Legal", 81 | "emoji": "🧑‍⚖️" 82 | }, 83 | { 84 | "id": "gaming", 85 | "name": "Gaming", 86 | "emoji": "🎮" 87 | }, 88 | { 89 | "id": "travel_and_tourism", 90 | "name": "Travel & Tourism", 91 | "emoji": "✈️" 92 | }, 93 | { 94 | "id": "jobs_and_careers", 95 | "name": "Jobs & Careers", 96 | "emoji": "🧑‍💼" 97 | }, 98 | { 99 | "id": "nonprofits", 100 | "name": "Nonprofits", 101 | "emoji": "🖐️" 102 | }, 103 | { 104 | "id": "food_and_cooking", 105 | "name": "Food & Cooking", 106 | "emoji": "🥗" 107 | }, 108 | { 109 | "id": "privacy_and_security", 110 | "name": "Privacy & Security", 111 | "emoji": "🔒" 112 | }, 113 | { 114 | "id": "pets_and_animals", 115 | "name": "Pets & Animals", 116 | "emoji": "🐶" 117 | }, 118 | { 119 | "id": "other", 120 | "name": "Other", 121 | "emoji": null 122 | } 123 | ] 124 | } 125 | -------------------------------------------------------------------------------- /library/rule-sets/0_example-rule/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "primaryCategoryId": "other" 6 | } 7 | -------------------------------------------------------------------------------- /library/rule-sets/0_example-rule/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "comments": "With this rule, when you open https:\/\/example.com\/hello in Safari, you will see the search results for the word \"hello\".\n\nThis is a sample rule for illustrative purposes.\nChange or remove this rule to enjoy your own redirect rule! 🚀\n", 7 | "destinationURLPattern": "https:\/\/duckduckgo.com\/?q=$1", 8 | "exampleURLs": [ 9 | "https:\/\/example.com\/hello" 10 | ], 11 | "excludeURLPatterns": [ 12 | { 13 | "type": "wildcard", 14 | "value": "https:\/\/example.com\/" 15 | } 16 | ], 17 | "kind": "Redirect", 18 | "sourceURLPattern": { 19 | "type": "wildcard", 20 | "value": "https:\/\/example.com\/*" 21 | }, 22 | "title": "Example Redirect Rule" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /library/rule-sets/10_DELETED_reddit-new-layout/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/10_DELETED_reddit-new-layout/.gitkeep -------------------------------------------------------------------------------- /library/rule-sets/11_reddit-old-layout/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/11_reddit-old-layout/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/11_reddit-old-layout/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "social_media" 9 | } 10 | -------------------------------------------------------------------------------- /library/rule-sets/11_reddit-old-layout/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "captureGroupProcesses": [], 7 | "comments": "This rule changes Reddit URLs from the newest layout to the old layout. This is useful if you prefer the old layout over other layouts.\n\nMedia and gallery URLs are excluded from this redirect, as they are not supported on this layout.\n\n⚠️ Please enable this rule AFTER logging into your Reddit account. Otherwise, Reddit may redirect you to www.reddit.com, resulting in an infinite loop.", 8 | "destinationURLPattern": "https:\/\/old.reddit.com\/$1", 9 | "exampleURLs": [ 10 | "https:\/\/www.reddit.com\/r\/BeAmazed\/comments\/164qg37\/mind_blown_it_really_is_true\/", 11 | "https:\/\/www.reddit.com\/media?url=https%3A%2F%2Fi.redd.it%2Fou5itrizf3lb1.png", 12 | "https:\/\/www.reddit.com\/", 13 | "https:\/\/new.reddit.com\/", 14 | "https:\/\/www.reddit.com\/gallery\/164qg37" 15 | ], 16 | "excludeURLPatterns": [ 17 | { 18 | "type": "wildcard", 19 | "value": "https:\/\/www.reddit.com\/media?url=*" 20 | }, 21 | { 22 | "type": "wildcard", 23 | "value": "https:\/\/www.reddit.com\/gallery\/*" 24 | } 25 | ], 26 | "kind": "Redirect", 27 | "sourceURLPattern": { 28 | "type": "regularExpression", 29 | "value": "https:\/\/www.reddit.com\/(.*)" 30 | }, 31 | "title": "Reddit: Old Layout by Default" 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /library/rule-sets/12_google-search-disable-ai/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/12_google-search-disable-ai/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/12_google-search-disable-ai/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/31", 3 | "contributorGitHubIds": [ 4 | "mshibanami" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "primaryCategoryId": "search" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/12_google-search-disable-ai/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "appVersion" : "5.1.1", 3 | "bundleID" : "io.github.mshibanami.RedirectWebForSafari", 4 | "kind" : "RedirectList", 5 | "redirects" : [ 6 | { 7 | "captureGroupProcesses" : [ 8 | 9 | ], 10 | "comments" : "This rule adds a query parameter udm=14 to display the search results on the Web tab.\n\nThe Web tab disables extra features such as AI overviews, related images, quotes, the \"People also ask\" section, etc., so you can focus on the actual search results.", 11 | "destinationURLPattern" : "$0&udm=14", 12 | "exampleURLs" : [ 13 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=what+is+locomotive+syndrome&ie=UTF-8&oe=UTF-8" 14 | ], 15 | "excludeURLPatterns" : [ 16 | { 17 | "type" : "regularExpression", 18 | "value" : ".*[?&](tbm=|udm=).*" 19 | } 20 | ], 21 | "isEnabled" : true, 22 | "kind" : "Redirect", 23 | "sourceURLPattern" : { 24 | "type" : "regularExpression", 25 | "value" : "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/search\\?(?:.*&)?q=.*$" 26 | }, 27 | "title" : "Google Search: Disable AI features, etc." 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /library/rule-sets/13_youtube_watch_embed/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/13_youtube_watch_embed/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/13_youtube_watch_embed/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/17", 3 | "contributorGitHubIds": [ 4 | "mattieb" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "primaryCategoryId": "arts_and_entertainment", 10 | "secondaryCategoryId": "social_media" 11 | } 12 | -------------------------------------------------------------------------------- /library/rule-sets/13_youtube_watch_embed/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "captureGroupProcesses": [], 7 | "comments": "If you, like me, have no use for the comments section, related videos, or annoying popup messages on YouTube, this redirect rule will take you from YouTube \"watch\" links to \"embed\" links automatically—the latter fills the screen.", 8 | "destinationURLPattern": "https:\/\/www.youtube.com\/embed\/$2?autoplay=1", 9 | "exampleURLs": [ 10 | "https:\/\/www.youtube.com\/watch?v=jfKfPfyJRdk", 11 | "https:\/\/m.youtube.com\/watch?v=jfKfPfyJRdk", 12 | "https:\/\/www.youtube.com\/watch?v=jfKfPfyJRdk&foo=bar" 13 | ], 14 | "excludeURLPatterns": [], 15 | "kind": "Redirect", 16 | "sourceURLPattern": { 17 | "type": "regularExpression", 18 | "value": "https:\/\/(www.|m.)youtube.com\/watch\\?v=([^&]*).*" 19 | }, 20 | "title": "YouTube Watch → Embed" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /library/rule-sets/14_facebook_always_show_most_recent_feed/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/14_facebook_always_show_most_recent_feed/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/14_facebook_always_show_most_recent_feed/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/33", 3 | "contributorGitHubIds": [ 4 | "mbirth" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "primaryCategoryId": "social_media", 10 | "supportedDeviceTypes": [ 11 | "desktop", 12 | "tablet" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /library/rule-sets/14_facebook_always_show_most_recent_feed/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID" : "io.github.mshibanami.RedirectWebForSafari", 3 | "kind" : "RedirectList", 4 | "redirects" : [ 5 | { 6 | "captureGroupProcesses" : [ 7 | 8 | ], 9 | "comments" : "To not get bombarded with random posts that want to grab your attention, this rule always redirects from the Facebook home page to the \"Most Recent\" feed where it shows only the posts of your friends sorted from latest to oldest.\n\n(Doesn't work inside the Facebook app, of course.)\n\n⚠️ This is unavailable on iPhone (but available on Mac and iPad) because the URLs for Facebook's Feeds and Home pages are both `https://www.facebook.com/` on iPhone.", 10 | "destinationURLPattern" : "https:\/\/www.facebook.com\/?filter=all&sk=h_chr", 11 | "exampleURLs" : [ 12 | "https:\/\/www.facebook.com", 13 | "https:\/\/www.facebook.com\/permalink.php?story_fbid=1234" 14 | ], 15 | "excludeURLPatterns" : [ 16 | 17 | ], 18 | "kind" : "Redirect", 19 | "sourceURLPattern" : { 20 | "type" : "wildcard", 21 | "value" : "https:\/\/www.facebook.com\/" 22 | }, 23 | "title" : "Facebook: Always Show Most Recent Feed Instead of Main Page" 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /library/rule-sets/15_google_maps_to_apple_maps/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/15_google_maps_to_apple_maps/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/15_google_maps_to_apple_maps/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/34", 3 | "contributorGitHubIds": [ 4 | "mbirth" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "title": "Maps: Open Google Maps Links in Apple Maps", 10 | "description": "This redirects from Google Maps links to Apple Maps.\nThis rule set consists of 3 redirect rules.", 11 | "primaryCategoryId": "travel_and_tourism", 12 | "secondaryCategoryId": "search" 13 | } 14 | -------------------------------------------------------------------------------- /library/rule-sets/15_google_maps_to_apple_maps/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "captureGroupProcesses": [ 7 | { 8 | "groupIndex": 1, 9 | "process": { 10 | "id": "replaceOccurrences", 11 | "matchingPattern": { 12 | "type": "regularExpression", 13 | "value": "(&source=[^&]*|\\?source=[^&]*&)" 14 | }, 15 | "replacement": "" 16 | } 17 | }, 18 | { 19 | "groupIndex": 1, 20 | "process": { 21 | "id": "replaceOccurrences", 22 | "matchingPattern": { 23 | "type": "regularExpression", 24 | "value": "ll=([^&]+)" 25 | }, 26 | "replacement": "near=$1" 27 | } 28 | } 29 | ], 30 | "comments": "This redirects from Google Maps links that start with \/maps? to Apple Maps.", 31 | "destinationURLPattern": "https:\/\/maps.apple.com\/?$1", 32 | "exampleURLs": [ 33 | "https:\/\/www.google.com\/maps?hl=en&t=k&ll=41.04522730,-72.32289310&q=United+States", 34 | "https:\/\/www.google.com\/maps?client=safari&sca_esv=01e0ca91490887a5&sca_upv=1&rls=en&output=search&q=Randwick,+Sydney&source=lnms&entry=mc&ved=1t:200715&ictx=111" 35 | ], 36 | "excludeURLPatterns": [], 37 | "kind": "Redirect", 38 | "sourceURLPattern": { 39 | "type": "regularExpression", 40 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/maps\\?(.*)" 41 | }, 42 | "title": "(1/3) Open Google Maps Links in Apple Maps" 43 | }, 44 | { 45 | "captureGroupProcesses": [], 46 | "comments": "This redirects from Google Maps links that start with \/maps\/place\/ or \/maps\/search\/ to Apple Maps.", 47 | "destinationURLPattern": "https:\/\/maps.apple.com\/?q=$1&near=$2&z=$3", 48 | "exampleURLs": [ 49 | "https:\/\/www.google.com\/maps\/place\/Austin+Gilchrist+Park\/@-28.0008805,153.4239061,20.84z\/data=!4m6!3m5!1s0x6b9105125a600bc9:0x1260b5faa506feda!8m2!3d-28.00088!4d153.42402!16s%2Fg%2F11j1f8tt3n?authuser=1&entry=ttu", 50 | "https:\/\/www.google.com\/maps\/search\/Cavill\/@-28.0018349,153.4258324,17z\/data=!3m1!4b1?authuser=1&entry=ttu" 51 | ], 52 | "excludeURLPatterns": [], 53 | "kind": "Redirect", 54 | "sourceURLPattern": { 55 | "type": "regularExpression", 56 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/maps\/(?:place|search)\/([^\/]*)\/@([-0-9.]*,[-0-9.]+)(?:,([-0-9.]+)z)?[\/?].*" 57 | }, 58 | "title": "(2/3) Open Google Maps Links in Apple Maps" 59 | }, 60 | { 61 | "captureGroupProcesses": [], 62 | "comments": "This redirects from Google Maps links that start with \/maps\/@ to Apple Maps.", 63 | "destinationURLPattern": "https:\/\/maps.apple.com\/?ll=$1&z=$2", 64 | "exampleURLs": [ 65 | "https:\/\/www.google.com\/maps\/@35.4220246,136.1436907,17.24z?authuser=1&entry=ttu" 66 | ], 67 | "excludeURLPatterns": [], 68 | "kind": "Redirect", 69 | "sourceURLPattern": { 70 | "type": "regularExpression", 71 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/maps\/@([-0-9.]*,[-0-9.]+)(?:,([-0-9.]+)z)?[\/?].*" 72 | }, 73 | "title": "(3/3) Open Google Maps Links in Apple Maps" 74 | } 75 | ] 76 | } 77 | -------------------------------------------------------------------------------- /library/rule-sets/16_google_search_to_kagi/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/16_google_search_to_kagi/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/16_google_search_to_kagi/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/47", 3 | "contributorGitHubIds": [ 4 | "inhzus" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "primaryCategoryId": "search", 10 | "secondaryCategoryId": "privacy_and_security" 11 | } 12 | -------------------------------------------------------------------------------- /library/rule-sets/16_google_search_to_kagi/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [], 8 | "comments": "This redirects from Google Search to Kagi automatically.", 9 | "destinationURLPattern": "https:\/\/kagi.com\/search?q=$1", 10 | "exampleURLs": [ 11 | "https:\/\/www.google.com\/search?q=hello&ie=UTF-8&oe=UTF-8&hl=en&client=safari", 12 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=hello&ie=UTF-8&oe=UTF-8" 13 | ], 14 | "excludeURLPatterns": [], 15 | "kind": "Redirect", 16 | "sourceURLPattern": { 17 | "type": "regularExpression", 18 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/search\\?(?:.*&)?q=([^&]*).*" 19 | }, 20 | "title": "Google → Kagi", 21 | "type": "originalRedirect" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /library/rule-sets/17_google_search_to_startpage/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/17_google_search_to_startpage/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/17_google_search_to_startpage/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "search", 9 | "secondaryCategoryId": "privacy_and_security" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/17_google_search_to_startpage/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [], 8 | "comments": "This redirects from Google Search to Startpage automatically.", 9 | "destinationURLPattern": "https:\/\/www.startpage.com\/sp\/search?query=$1", 10 | "exampleURLs": [ 11 | "https:\/\/www.google.com\/search?q=hello&ie=UTF-8&oe=UTF-8&hl=en&client=safari", 12 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=hello&ie=UTF-8&oe=UTF-8" 13 | ], 14 | "excludeURLPatterns": [], 15 | "kind": "Redirect", 16 | "sourceURLPattern": { 17 | "type": "regularExpression", 18 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/search\\?(?:.*&)?q=([^&]*).*" 19 | }, 20 | "title": "Google → Startpage", 21 | "type": "originalRedirect" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /library/rule-sets/18_google_search_to_brave_search/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/18_google_search_to_brave_search/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/18_google_search_to_brave_search/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "search", 9 | "secondaryCategoryId": "privacy_and_security" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/18_google_search_to_brave_search/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [], 8 | "comments": "This redirects from Google Search to Brave Search automatically.", 9 | "destinationURLPattern": "https:\/\/search.brave.com\/search?q=$1", 10 | "exampleURLs": [ 11 | "https:\/\/www.google.com\/search?q=hello&ie=UTF-8&oe=UTF-8&hl=en&client=safari", 12 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=hello&ie=UTF-8&oe=UTF-8" 13 | ], 14 | "excludeURLPatterns": [], 15 | "kind": "Redirect", 16 | "sourceURLPattern": { 17 | "type": "regularExpression", 18 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/search\\?(?:.*&)?q=([^&]*).*" 19 | }, 20 | "title": "Google → Brave Search", 21 | "type": "originalRedirect" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /library/rule-sets/19_youtube_shorts_to_normal_videos/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/19_youtube_shorts_to_normal_videos/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/19_youtube_shorts_to_normal_videos/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "arts_and_entertainment", 9 | "secondaryCategoryId": "social_media" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/19_youtube_shorts_to_normal_videos/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "comments": "This converts YouTube Shorts into regular videos, allowing them to be played on a less addictive UI with full controls.", 8 | "destinationURLPattern": "https:\/\/$1.youtube.com\/watch?v=$2", 9 | "exampleURLs": [ 10 | "https:\/\/www.youtube.com\/shorts\/ontm1vqONVY", 11 | "https:\/\/m.youtube.com\/shorts\/ontm1vqONVY" 12 | ], 13 | "kind": "Redirect", 14 | "resourceTypes": [ 15 | "main_frame" 16 | ], 17 | "sourceURLPattern": { 18 | "type": "regularExpression", 19 | "value": "https:\/\/((?:www)*(?:m)*)\\.youtube\\.com\/shorts\/([^?]+).*" 20 | }, 21 | "title": "YouTube: Watch Short Videos as Normal Videos", 22 | "type": "declarativeNetRequestRedirect" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /library/rule-sets/1_google-meet-open-in-chrome/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/1_google-meet-open-in-chrome/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/1_google-meet-open-in-chrome/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/1", 9 | "title": "Google Meet: Open in Chrome", 10 | "description": "A rule to open Google Meet links in Google Chrome automatically.", 11 | "primaryCategoryId": "productivity", 12 | "secondaryCategoryId": "business" 13 | } 14 | -------------------------------------------------------------------------------- /library/rule-sets/1_google-meet-open-in-chrome/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "appURL": "file:\/\/\/Applications\/Google%20Chrome.app", 7 | "comments": "This is a rule to open Google Meet links in Google Chrome automatically.", 8 | "destinationURLPattern": "$0", 9 | "exampleURLs": [ 10 | "https:\/\/meet.google.com\/xxx-yyyy-zzz", 11 | "https:\/\/meet.google.com\/xxx-yyyy-zzz?pli=1" 12 | ], 13 | "kind": "Redirect", 14 | "sourceURLPattern": { 15 | "type": "regularExpression", 16 | "value": "(https:\/\/meet.google.com\/[a-z]*-[a-z]*-[a-z]*)(\\?.*)?" 17 | }, 18 | "title": "Google Meet: Open in Chrome" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /library/rule-sets/20_fix_open_puppies/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/20_fix_open_puppies/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/20_fix_open_puppies/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/heyitsolivia/secretpuppies/issues/90", 3 | "contributorGitHubIds": [ 4 | "mshibanami" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "supportedDeviceTypes": [ 10 | "phone", 11 | "tablet" 12 | ], 13 | "primaryCategoryId": "pets_and_animals", 14 | "secondaryCategoryId": "arts_and_entertainment" 15 | } 16 | -------------------------------------------------------------------------------- /library/rule-sets/20_fix_open_puppies/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "comments": "Do you know OpenPuppies (https:\/\/openpuppies.com\/)? It’s a website where you can watch random short videos of puppies. However, the videos don’t load properly on mobile devices. This rule fixes that, so you can enjoy cute puppy videos on your phone or tablet!", 8 | "destinationURLPattern": "$1.mp4", 9 | "kind": "Redirect", 10 | "resourceTypes": [ 11 | "image" 12 | ], 13 | "sourceURLPattern": { 14 | "type": "regularExpression", 15 | "value": "(https:\/\/openpuppies\\.com\/mp4\/[^.]*)\\.gif" 16 | }, 17 | "title": "Fix OpenPuppies for Mobile Devices", 18 | "type": "declarativeNetRequestRedirect" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /library/rule-sets/21_youtube_open_in_yattee_app/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/21_youtube_open_in_yattee_app/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/21_youtube_open_in_yattee_app/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/pull/23", 3 | "contributorGitHubIds": [ 4 | "lilaelephant" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "primaryCategoryId": "arts_and_entertainment", 10 | "secondaryCategoryId": "social_media" 11 | } 12 | -------------------------------------------------------------------------------- /library/rule-sets/21_youtube_open_in_yattee_app/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID" : "io.github.mshibanami.RedirectWebForSafari", 3 | "kind" : "RedirectList", 4 | "redirects" : [ 5 | { 6 | "captureGroupProcesses" : [ 7 | 8 | ], 9 | "comments" : "This rule intercepts YouTube and related privacy frontends video URLs and redirects them to open in the Yattee app via a custom URL scheme (yattee://watch?).", 10 | "destinationURLPattern" : "yattee:\/\/watch?$1", 11 | "exampleURLs" : [ 12 | "https:\/\/piped.video\/watch?v=asqxzaNGRWo", 13 | "https:\/\/youtube.com\/watch?v=asqxzaNGRWo", 14 | "https:\/\/m.youtube.com\/watch?v=asqxzaNGRWo", 15 | "https:\/\/www.youtube.com\/watch?v=asqxzaNGRWo", 16 | "https:\/\/youtube.de\/watch?v=asqxzaNGRWo", 17 | "https:\/\/youtube-nocookie.com\/watch?v=asqxzaNGRWo", 18 | "https:\/\/m.youtube.com\/watch?v=ZxYZkz20lYA&pp=ygUIdGVzdGluZyA%3D" 19 | ], 20 | "excludeURLPatterns" : [ 21 | { 22 | "type" : "wildcard", 23 | "value" : "https:\/\/youtube.com" 24 | }, 25 | { 26 | "type" : "wildcard", 27 | "value" : "https:\/\/www.youtube.com" 28 | } 29 | ], 30 | "kind" : "Redirect", 31 | "sourceURLPattern" : { 32 | "type" : "regularExpression", 33 | "value" : "(?:https?:\\\/\\\/)?(?:[\\w.-]+)?(?:youtube\\.com|piped\\.video|youtube-nocookie\\.com|youtube\\.de)\\\/watch\\?(.*)" 34 | }, 35 | "title" : "Youtube: Open in Yattee" 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /library/rule-sets/22_amazon_strip_affiliate_tracking_parameters/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/22_amazon_strip_affiliate_tracking_parameters/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/22_amazon_strip_affiliate_tracking_parameters/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/68", 3 | "contributorGitHubIds": [ 4 | "mshibanami" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "primaryCategoryId": "shopping", 10 | "secondaryCategoryId": "privacy_and_security" 11 | } 12 | -------------------------------------------------------------------------------- /library/rule-sets/22_amazon_strip_affiliate_tracking_parameters/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [], 8 | "comments": "This rule strips unnecessary parameters from Amazon product links, including affiliate and tracking codes.\n\nIt adds a `th=1` parameter to prevent an infinite loop caused by Amazon automatically appending it.", 9 | "destinationURLPattern": "$1$5?th=1$6", 10 | "exampleURLs": [ 11 | "https:\/\/www.amazon.co.jp\/dp\/B0B13WY4DL?th=1&linkCode=sl1&tag=redirectwebtest-22&linkId=0123456789abcdefghijklmnopqrstuvw&ref_=as_li_ss_tl", 12 | "https:\/\/www.amazon.com.au\/Imabari-Factory-Certified-Approx-inches\/dp\/B09RWHGLVM\/ref=sr_1_3?hello=world", 13 | "https:\/\/www.amazon.co.jp\/dp\/B0B13WY4DL?", 14 | "https:\/\/www.amazon.it\/dp\/B09PG7M43W?tag=redirectwebtest-22", 15 | "https:\/\/www.amazon.com.au\/dp\/B00YMSLT88", 16 | "https:\/\/www.amazon.com.be\/dp\/1974752542?tag=redirectwebtest-22#immersive-view_1739779534435", 17 | "https:\/\/www.amazon.com.be\/dp\/1974752542#immersive-view_1739779534435" 18 | ], 19 | "excludeURLPatterns": [], 20 | "kind": "Redirect", 21 | "sourceURLPattern": { 22 | "type": "regularExpression", 23 | "value": "(https:\/\/(www\\.)?amazon\\.(com\\.au|com\\.be|com\\.br|ca|cn|eg|fr|de|in|it|co\\.jp|com\\.mx|nl|pl|sa|sg|es|se|com\\.tr|ae|co\\.uk|com|co|com\\.cn|com\\.sg)\/)(.+\/)?(dp\/[^\/?#]+)[^#]*(#.*)?" 24 | }, 25 | "title": "Amazon: Strip Affiliate and Tracking Parameters", 26 | "type": "originalRedirect" 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /library/rule-sets/23_twitter_to_nitter/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/23_twitter_to_nitter/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/23_twitter_to_nitter/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "social_media", 9 | "secondaryCategoryId": "privacy_and_security" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/23_twitter_to_nitter/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [], 8 | "comments": "This allows you to redirect from X (Twitter) to xcancel.com, which is powered by Nitter.\n\nNitter is a free and open-source alternative Twitter front-end focused on privacy and performance.\n\nxcancel.com is one of the most popular Nitter instances, but it's just one of many instances. You can find others here:\nhttps:\/\/status.d420.de\n", 9 | "destinationURLPattern": "https:\/\/xcancel.com\/$1", 10 | "exampleURLs": [ 11 | "https:\/\/x.com\/UN\/status\/1841123718212284495", 12 | "https:\/\/twitter.com\/search?f=tweets&q=world" 13 | ], 14 | "excludeURLPatterns": [], 15 | "kind": "Redirect", 16 | "sourceURLPattern": { 17 | "type": "regularExpression", 18 | "value": "https:\/\/(?:x|twitter).com\/(.*)" 19 | }, 20 | "title": "X (Twitter) → Nitter (xcancel.com)", 21 | "type": "originalRedirect" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /library/rule-sets/24_google_search_to_chatgpt/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/24_google_search_to_chatgpt/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/24_google_search_to_chatgpt/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "search", 9 | "secondaryCategoryId": "productivity" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/24_google_search_to_chatgpt/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [ 8 | { 9 | "groupIndex": 1, 10 | "process": { 11 | "id": "replaceOccurrences", 12 | "matchingPattern": { 13 | "type": "regularExpression", 14 | "value": "^gpt\\+" 15 | }, 16 | "replacement": "" 17 | } 18 | } 19 | ], 20 | "comments": "This rule works when Google is your default search engine. If you start an search-bar search with “gpt ”, Redirect Web skips Google and takes you straight to ChatGPT with whatever follows “gpt ”. To use a different trigger word, just replace “gpt ” in the rule with your own.\n\nYou can add these options:\n\n- `q={your text}`: your ChatGPT prompt\n- `hints=search`: turns on ChatGPT's search mode\n- `temporary-chat=true`: opens a one-time chat\n- `model={model name}`: picks which model to use (e.g. \"gpt-4o\", \"o3\")", 21 | "destinationURLPattern": "https:\/\/chatgpt.com\/?q=$1&hints=search&temporary-chat=true", 22 | "exampleURLs": [ 23 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=hello+world&ie=UTF-8&oe=UTF-8", 24 | "https:\/\/www.google.com\/search?q=gpt+What+kind+of+bear+is+best?", 25 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=gpt+hello+world&ie=UTF-8&oe=UTF-8" 26 | ], 27 | "excludeURLPatterns": [], 28 | "isEnabled": true, 29 | "kind": "Redirect", 30 | "sourceURLPattern": { 31 | "type": "regularExpression", 32 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/search\\?(?:.*&)?q=(gpt\\+[^&]*).*" 33 | }, 34 | "title": "Google Search “gpt ” Prefix → ChatGPT", 35 | "type": "originalRedirect" 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /library/rule-sets/25_ddg_to_startpage_wile_keeping_bangs_working/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/25_ddg_to_startpage_wile_keeping_bangs_working/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/25_ddg_to_startpage_wile_keeping_bangs_working/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/73", 3 | "contributorGitHubIds": [ 4 | "puzzlemoondev" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "primaryCategoryId": "search" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/25_ddg_to_startpage_wile_keeping_bangs_working/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [], 8 | "comments": "This redirects from DuckDuckGo Search to Startpage automatically while keeping bangs functional.", 9 | "destinationURLPattern": "https:\/\/www.startpage.com\/sp\/search?query=$1", 10 | "exampleURLs": [ 11 | "https:\/\/duckduckgo.com\/?q=search&kp=-1&kl=us-en", 12 | "https:\/\/www.duckduckgo.com\/?q=search&kp=-1&kl=us-en", 13 | "https:\/\/www.duckduckgo.com\/?q=!a%20search&kp=-1&kl=us-en" 14 | ], 15 | "excludeURLPatterns": [ 16 | { 17 | "type": "regularExpression", 18 | "value": "https?:\\\/\\\/(?:www\\.)?duckduckgo\\.com\\\/\\?(?:.*&)?q=\\!\\w+.*" 19 | } 20 | ], 21 | "isEnabled": true, 22 | "kind": "Redirect", 23 | "sourceURLPattern": { 24 | "type": "regularExpression", 25 | "value": "https?:\\\/\\\/(?:www\\.)?duckduckgo\\.com\\\/\\?(?:.*&)?q=([^&]*).*" 26 | }, 27 | "title": "DuckDuckGo -> Startpage while keeping bangs working", 28 | "type": "originalRedirect" 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /library/rule-sets/26_google_search_to_chatgpt_by_default/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/26_google_search_to_chatgpt_by_default/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/26_google_search_to_chatgpt_by_default/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "search", 9 | "secondaryCategoryId": "productivity" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/26_google_search_to_chatgpt_by_default/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [], 8 | "comments": "This rule redirects Google Search to ChatGPT by default, allowing you to use ChatGPT as your default search engine.\n\nYou can add these options:\n\n- `q={your text}`: your ChatGPT prompt\n- `hints=search`: turns on ChatGPT’s search mode\n- `temporary-chat=true`: opens a one-time chat\n- `model={model name}`: picks which model to use (e.g. \"gpt-4o\", \"o3\")", 9 | "destinationURLPattern": "https:\/\/chatgpt.com\/?q=$1&hints=search&temporary-chat=true", 10 | "exampleURLs": [ 11 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=hello+world", 12 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=gpt+hello+world&ie=UTF-8&oe=UTF-8" 13 | ], 14 | "excludeURLPatterns": [], 15 | "kind": "Redirect", 16 | "sourceURLPattern": { 17 | "type": "regularExpression", 18 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/search\\?(?:.*&)?q=([^&]*).*" 19 | }, 20 | "title": "Google Search → ChatGPT", 21 | "type": "originalRedirect" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /library/rule-sets/27_google_search_to_perplexity/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/27_google_search_to_perplexity/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/27_google_search_to_perplexity/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "search", 9 | "secondaryCategoryId": "productivity" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/27_google_search_to_perplexity/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "formatVersion": "2", 4 | "kind": "RedirectList", 5 | "redirects": [ 6 | { 7 | "captureGroupProcesses": [], 8 | "comments": "This rule redirects Google Search to Perplexity, allowing you to use Perplexity as your default search engine.", 9 | "destinationURLPattern": "https:\/\/www.perplexity.ai\/search?q=$1", 10 | "exampleURLs": [ 11 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=hello+world", 12 | "https:\/\/www.google.com\/search?client=safari&rls=en&q=hello+world&ie=UTF-8&oe=UTF-8" 13 | ], 14 | "excludeURLPatterns": [], 15 | "kind": "Redirect", 16 | "sourceURLPattern": { 17 | "type": "regularExpression", 18 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/search\\?(?:.*&)?q=([^&]*).*" 19 | }, 20 | "title": "Google Search → Perplexity", 21 | "type": "originalRedirect" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /library/rule-sets/2_notion-open-in-notion-app/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/2_notion-open-in-notion-app/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/2_notion-open-in-notion-app/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/2", 3 | "contributorGitHubIds": [ 4 | "mshibanami" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "primaryCategoryId": "productivity" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/2_notion-open-in-notion-app/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "appURL": "file:\/\/\/Applications\/Notion.app", 7 | "comments": "Notion allows you to open the Notion app by changing the scheme of the Notion page URL from https to notion. This rule automates that process.", 8 | "destinationURLPattern": "notion:\/\/$1", 9 | "exampleURLs": [ 10 | "https:\/\/www.notion.so\/Quick-Note-c5a2f0fa248e4de38ab1866c25cffe10" 11 | ], 12 | "kind": "Redirect", 13 | "sourceURLPattern": { 14 | "type": "regularExpression", 15 | "value": "https:\/\/(www.notion.so\/.+)" 16 | }, 17 | "title": "Notion: Open in Notion App" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /library/rule-sets/3_wikipedia-open-in-wikiwand/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/3_wikipedia-open-in-wikiwand/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/3_wikipedia-open-in-wikiwand/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/5", 3 | "imageFiles": [ 4 | "cover.webp" 5 | ], 6 | "contributorGitHubIds": [ 7 | "mshibanami" 8 | ], 9 | "primaryCategoryId": "reference" 10 | } 11 | -------------------------------------------------------------------------------- /library/rule-sets/3_wikipedia-open-in-wikiwand/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "captureGroupProcesses": [], 7 | "comments": "With this rule, you can open Wikipedia pages in Wikiwand automatically.", 8 | "destinationURLPattern": "https:\/\/www.wikiwand.com\/$1\/$2", 9 | "exampleURLs": [ 10 | "https:\/\/en.wikipedia.org\/wiki\/Ramen", 11 | "https:\/\/en.m.wikipedia.org\/wiki\/Shiga_Prefecture" 12 | ], 13 | "excludeURLPatterns": [], 14 | "kind": "Redirect", 15 | "sourceURLPattern": { 16 | "type": "regularExpression", 17 | "value": "https:\\\/\\\/([^.]*)(?:\\.[^.]*)?\\.wikipedia\\.org\/wiki\/(.*)" 18 | }, 19 | "title": "Wikipedia: Open in Wikiwand" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /library/rule-sets/4_github-hide-whitespace-changes-in-pull-request/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/4_github-hide-whitespace-changes-in-pull-request/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/4_github-hide-whitespace-changes-in-pull-request/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/3", 3 | "contributorGitHubIds": [ 4 | "mshibanami" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "title": "GitHub: Ignore Whitespace Changes in a Pull Request", 10 | "description": "This hides whitespace changes in a pull request on GitHub automatically.", 11 | "primaryCategoryId": "software_development" 12 | } 13 | -------------------------------------------------------------------------------- /library/rule-sets/4_github-hide-whitespace-changes-in-pull-request/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "comments": "This rule hides whitespace changes in a pull request on GitHub automatically.", 7 | "destinationURLPattern": "https:\/\/github.com\/$1\/$2\/pull\/$3\/files?diff=unified&w=1", 8 | "exampleURLs": [ 9 | "https:\/\/github.com\/mshibanami\/GitHubTrendingRSS\/pull\/6\/files" 10 | ], 11 | "kind": "Redirect", 12 | "sourceURLPattern": { 13 | "type": "regularExpression", 14 | "value": "https:\/\/github.com\/(.*)\/(.*)\/pull\/(.*)\/files" 15 | }, 16 | "title": "GitHub: Ignore Whitespace Changes in a Pull Request" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /library/rule-sets/5_figma-open-in-figma-app/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/5_figma-open-in-figma-app/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/5_figma-open-in-figma-app/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutUrl": "https://github.com/mshibanami/redirect-web/discussions/6", 3 | "contributorGitHubIds": [ 4 | "mshibanami" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "title": "Figma: Open in Figma App", 10 | "description": "Open Figma links in the Figma app automatically.", 11 | "primaryCategoryId": "arts_and_entertainment" 12 | } 13 | -------------------------------------------------------------------------------- /library/rule-sets/5_figma-open-in-figma-app/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "appURL": "file:\/\/\/Applications\/Figma.app", 7 | "comments": "This is a rule to open Figma links in the Figma app automatically.", 8 | "destinationURLPattern": "figma:\/\/$1", 9 | "exampleURLs": [ 10 | "https:\/\/www.figma.com\/file\/XZp2hMcv4s3gmqKtXg4uupfX\/Personal-Colors?node-id=2%3A22" 11 | ], 12 | "kind": "Redirect", 13 | "sourceURLPattern": { 14 | "type": "regularExpression", 15 | "value": "https:\/\/www.figma.com\/((file|design)\/.*)" 16 | }, 17 | "title": "Figma: Open in Figma App" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /library/rule-sets/6_google-search-to-youtube/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/6_google-search-to-youtube/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/6_google-search-to-youtube/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "aboutURL": "https://github.com/mshibanami/redirect-web/discussions/8", 3 | "contributorGitHubIds": [ 4 | "mshibanami" 5 | ], 6 | "imageFiles": [ 7 | "cover.webp" 8 | ], 9 | "title": "Google Search: From Video Tab to YouTube's Search Results", 10 | "description": "This redirects from the Videos tab on Google Search to the search results on YouTube automatically.", 11 | "primaryCategoryId": "search" 12 | } 13 | -------------------------------------------------------------------------------- /library/rule-sets/6_google-search-to-youtube/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "comments": "Enabling this rule, you are automatically redirected from the Videos tab on Google Search to the search results on YouTube.", 7 | "destinationURLPattern": "https:\/\/www.youtube.com\/results?search_query=$1$2", 8 | "exampleURLs": [ 9 | "https:\/\/www.google.com\/search?q=ramen&client=safari&sca_esv=577385484&rls=en&tbm=vid&source=lnms&sa=X&ved=2ahUKEwid4fvdh5iCAxWUr1YBHUfYAqQQ_AUoBHoECAQQBg" 10 | ], 11 | "kind": "Redirect", 12 | "sourceURLPattern": { 13 | "type": "regularExpression", 14 | "value": "https?:\\\/\\\/(?:www\\.)?google\\.(?:com|com\\.[a-z]{2}|co\\.[a-z]{2}|[a-z]{2})\\\/search\\?(?:.*&)?(?:(?:(?:tbm=vid|udm=7)&?)(?:&.+)?&q=([^&]*)|q=([^&]*)(?:&.+)?(?:&(?:tbm=vid|udm=7)&?).*)" 15 | }, 16 | "title": "Google Search: From Video Tab to YouTube's Search Results" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /library/rule-sets/7_minecraft-fandom-wiki-to-mincraft-wiki/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/7_minecraft-fandom-wiki-to-mincraft-wiki/cover.webp -------------------------------------------------------------------------------- /library/rule-sets/7_minecraft-fandom-wiki-to-mincraft-wiki/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "cover.webp" 7 | ], 8 | "primaryCategoryId": "gaming" 9 | } 10 | -------------------------------------------------------------------------------- /library/rule-sets/7_minecraft-fandom-wiki-to-mincraft-wiki/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "comments": "Enabling this rule, users attempting to access the Minecraft Wiki on Fandom will be automatically redirected to the new domain at minecraft.wiki, ensuring they receive the latest and most accurate information from the official wiki source.", 7 | "destinationURLPattern": "https:\/\/minecraft.wiki\/w\/$1", 8 | "exampleURLs": [ 9 | "https:\/\/minecraft.fandom.com\/wiki\/Block" 10 | ], 11 | "kind": "Redirect", 12 | "sourceURLPattern": { 13 | "type": "wildcard", 14 | "value": "https:\/\/minecraft.fandom.com\/wiki\/*" 15 | }, 16 | "title": "Minecraft Wiki: From Fandom to minecraft.wiki" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /library/rule-sets/8_DELETED/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/8_DELETED/.gitkeep -------------------------------------------------------------------------------- /library/rule-sets/9_terraria-fandom-wiki-to-wiki-gg/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributorGitHubIds": [ 3 | "mshibanami" 4 | ], 5 | "imageFiles": [ 6 | "screenshot.jpg" 7 | ], 8 | "primaryCategoryId": "gaming" 9 | } 10 | -------------------------------------------------------------------------------- /library/rule-sets/9_terraria-fandom-wiki-to-wiki-gg/rule-set.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "comments": "Enabling this rule, users attempting to access the Terraria Wiki on Fandom will be automatically redirected to the new domain at wiki.gg, ensuring they receive the latest and most accurate information from the official wiki source.", 7 | "destinationURLPattern": "https:\/\/terraria.wiki.gg\/$1", 8 | "exampleURLs": [ 9 | "https:\/\/terraria.fandom.com\/wiki\/Guide:Getting_started" 10 | ], 11 | "kind": "Redirect", 12 | "sourceURLPattern": { 13 | "type": "wildcard", 14 | "value": "https:\/\/terraria.fandom.com\/*" 15 | }, 16 | "title": "Terraria Wiki: From Fandom to wiki.gg" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /library/rule-sets/9_terraria-fandom-wiki-to-wiki-gg/screenshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/library/rule-sets/9_terraria-fandom-wiki-to-wiki-gg/screenshot.jpg -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "redirect-web", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "docusaurus": "docusaurus", 7 | "start": "docusaurus start", 8 | "build": "docusaurus build", 9 | "swizzle": "docusaurus swizzle", 10 | "deploy": "docusaurus deploy", 11 | "clear": "docusaurus clear", 12 | "serve": "docusaurus serve", 13 | "write-translations": "docusaurus write-translations", 14 | "write-heading-ids": "docusaurus write-heading-ids", 15 | "typecheck": "tsc" 16 | }, 17 | "dependencies": { 18 | "@docusaurus/core": "^3.7.0", 19 | "@docusaurus/preset-classic": "^3.7.0", 20 | "@mdx-js/react": "^3.1.0", 21 | "clsx": "^2.1.1", 22 | "prism-react-renderer": "^2.4.1", 23 | "react": "^19.1.0", 24 | "react-dom": "^19.1.0", 25 | "remark-github-admonitions-to-directives": "^2.1.0" 26 | }, 27 | "devDependencies": { 28 | "@docusaurus/module-type-aliases": "^3.7.0", 29 | "@docusaurus/tsconfig": "^3.7.0", 30 | "@docusaurus/types": "^3.7.0", 31 | "typescript": "~5.8.3" 32 | }, 33 | "browserslist": { 34 | "production": [ 35 | ">0.5%", 36 | "not dead", 37 | "not op_mini all" 38 | ], 39 | "development": [ 40 | "last 3 chrome version", 41 | "last 3 firefox version", 42 | "last 5 safari version" 43 | ] 44 | }, 45 | "engines": { 46 | "node": ">=18.0", 47 | "npm": ">=8.0" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /release-notes-drafts/8.0.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: [DRAFT] Version 8.0.0 3 | date: 2025-06-10 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | A new major version update! 🚀 9 | 10 | ### 1. Multi-browser support on Mac is here! 11 | 12 | Redirect Web is now available on **Google Chrome**, **Firefox**, **Microsoft Edge**, and other compatible browsers! This means you can now use Redirect Web on your Mac with your favorite browser, not just Safari. 13 | 14 | ⏬️ Download links: 15 | 16 | - [Google Chrome](https://example.com/) 17 | - [Firefox](https://example.com/) 18 | - Since Firefox still supports Manifest V2, Redirect Web uses the `webRequestBlocking` permission for the Original type, which is a more reliable & flexible way to redirect requests. 19 | - [Microsoft Edge](https://example.com/) 20 | 21 | :::note 22 | 23 | - You still need to download the [Redirect Web app from the Mac App Store](https://apps.apple.com/app/id1571283503) to use the extension on these browsers since the extensions need to communicate with [the native messaging host](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging#native-messaging-host) in the Redirect Web app bundle. The app will automatically detect the installed browsers and activate the extension for them. 24 | - The multi-browser support is only available on Mac. 25 | 26 | ::: 27 | 28 | ### 2. Changed the app name to Redirect Web 29 | 30 | The former name "Redirect for Safari" for macOS has been changed to **Redirect Web** since it now supports multiple browsers. Sorry for making the name less searchable on your search engine. 😅 31 | 32 | ### 3. Bug fixes and improvements 33 | 34 | - Fixed a bug of the DNR redirection type. Now, Redirect Web can set your DNR rules more reliably. 35 | - Fixed the toggle switches for enabling and disabling each rule in the extension popup. Previously, the switch animation was not smooth. It appeared to briefly revert to the previous state when clicked. 36 | - Fixed occasional redirection loop caused when you use the `Original` redirection type. 37 | - Fixed the extension popup is not displayed when you enable the App Lock feature on iOS 18. 38 | - Improved the performance of the extension by optimizing the background script. 39 | - Rewrote the codebase using [WXT](https://wxt.dev). 40 | - Stopped adding escape sequences for slashes in the strings in exported rule files. It was unnecessary and only decreased readability. 41 | 42 | --- 43 | 44 | If you enjoy using Redirect Web, please consider leaving a review on the stores. It really helps! 45 | -------------------------------------------------------------------------------- /release-notes/7.0.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.0.0 (Major Update) 3 | date: 2024-08-04 4 | --- 5 | 6 | - **New Redirection Type** 7 | 8 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 9 | 10 | We have added a new redirection type called **DNR**. 11 | It allows you to redirect anything, including iframes, images, JavaScript, etc. (Finally!) 12 | Moreover, it works much faster than the original redirection type. 13 | 14 | :::warning 15 | 16 | After updating the app, you may see an alert in Safari that disables the extension due to a new permission requested. This is because the DNR type requires it to work. Please re-enable the extension. Sorry for the inconvenience. 17 | 18 | ::: 19 | 20 | Learn more about the DNR type [here](/rule-settings#type). 21 | 22 | - **App Lock (Version 7.2 or later)** 23 | 24 | ![Supported Platforms: iOS](https://img.shields.io/badge/Platforms-iOS-white) 25 | 26 | You can now secure both the app and the extension. It's perfect for use with parental controls. Set it up in Settings > App Lock. (Note: This feature is not available on macOS.) 27 | -------------------------------------------------------------------------------- /release-notes/7.11.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.11.0 3 | date: 2025-05-01 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | * Fixed an issue where the Rule Details screen in the Library showed nothing on iOS 17 or earlier, and macOS Sonoma or earlier. 9 | 10 | -------------------------------------------------------------------------------- /release-notes/7.12.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.12.0 3 | date: 2025-02-03 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | * **[macOS]** Fixed an issue where the app initiated redirection while the user was still typing in the address bar. This occurred when a rule was set to redirect to another application. 9 | * **[macOS]** Adjusted the color of the buttons in dark mode for improved visibility. It was too vivid. 10 | * Other minor improvements and bug fixes. 11 | -------------------------------------------------------------------------------- /release-notes/7.14.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.14.0 3 | date: 2025-04-04 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | * **[macOS]** Added support for Sequoia 15.4 9 | * Fixed an issue where deep link redirection was not working. (The same change is also applied to iOS extension, which might fix a potential issue.) 10 | * Added support for redirecting to URLs using the Original redirection type, which starts with the following URI schemes: 11 | * `file:///...` (local file) 12 | * `data:...` (data URL) 13 | * **[macOS]** `javascript:...` (JavaScript) 14 | * This is available only when you enable `Allow JavaScript from Smart Search field` in Safari, which requires system authentication. 15 | * Added a Release Notes section for your convenience. 16 | -------------------------------------------------------------------------------- /release-notes/7.15.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.15.0 3 | date: 2025-04-09 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | * [iPad, visionOS] Fixed broken layout of the extension popup shown in Safari. 9 | * Improved the UI of the extension popup in Safari. 10 | * Fixed localizations for non-English languages. 11 | * Other minor improvements and bug fixes. 12 | -------------------------------------------------------------------------------- /release-notes/7.16.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.16.0 3 | date: 2025-04-15 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | * A major improvement to the `Original` redirection type. Now it works faster & reliable than before. 9 | * Improved the localized app name in the App Store for Chinese, Japanese, Korean, and Russian languages. 10 | * [iOS] Supported dark themed app icon for iOS 18 or later. 11 | -------------------------------------------------------------------------------- /release-notes/7.17.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.17.0 3 | date: 2025-05-02 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | * Now the app displays more detailed error messages, highlighting specific characters when an invalid pattern is entered in the Redirect From section. 9 | * [iOS] Improved the dark themed app icon. 10 | -------------------------------------------------------------------------------- /release-notes/7.17.1.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.17.1 3 | date: 2025-05-05 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | * Hot fix of displaying the detailed error message introduced in 7.17.0. 9 | * Updated the app screenshots in the App Store. 10 | -------------------------------------------------------------------------------- /release-notes/7.18.0.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.18.0 3 | date: 2025-05-14 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | **TL;DR: Only minor changes.** 9 | 10 | * Changed the terminology from "Redirect Rule" to just "Rule" to prepare for **potential** future support of [additional DNR actions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest/RuleAction), including `block` and `modifyHeaders`, alongside the existing `redirect` action. 11 | * [iPadOS 18] Fixed an issue where the shooting-star animation, shown when getting a pre-defined rule from the Library, was not displaying correctly. 12 | * Updated the app descriptions on the App Store. 13 | * Localized the app screenshots for the iOS App Store in Japan. (Maybe we'll also localize for other regions soon.) 14 | 15 | Also, the app was featured last week in the "Essential Safari Extensions" section on the App Store Japan 🇯🇵. Thank you for your continued support! If you enjoy using Redirect Web, please consider leaving a review. It really helps! 16 | -------------------------------------------------------------------------------- /release-notes/7.18.1.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Version 7.18.1 3 | date: 2025-05-16 4 | --- 5 | 6 | ![Supported Platforms: iOS | macOS | visionOS](https://img.shields.io/badge/Platforms-iOS%20|%20macOS%20|%20visionOS-white) 7 | 8 | * Fixed a crash that could occur when entering an invalid URL pattern in the Redirect From section on the Edit Rule screen. This issue has existed since version 7.17.0. We recommend updating to this version if you have already installed 7.17.0 or later. Sorry for the inconvenience. 9 | -------------------------------------------------------------------------------- /sidebars.ts: -------------------------------------------------------------------------------- 1 | import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; 2 | 3 | /** 4 | * Creating a sidebar enables you to: 5 | - create an ordered group of docs 6 | - render a sidebar for each doc of that group 7 | - provide next/previous navigation 8 | 9 | The sidebars can be generated from the filesystem, or explicitly defined here. 10 | 11 | Create as many sidebars as you want. 12 | */ 13 | const sidebars: SidebarsConfig = { 14 | tutorialSidebar: [ 15 | "introduction", 16 | "getting-started", 17 | "rule-settings", 18 | "library", 19 | "export-or-import-rules", 20 | { 21 | type: 'category', 22 | label: 'Q&A', 23 | items: [ 24 | "contact-us", 25 | "faq", 26 | ], 27 | }, 28 | { 29 | type: 'category', 30 | label: 'Misc.', 31 | items: [ 32 | { 33 | type: 'link', 34 | label: 'Release Notes', 35 | href: 'release-notes', 36 | }, 37 | "privacy-policy", 38 | "terms-of-use", 39 | ] 40 | } 41 | ], 42 | }; 43 | 44 | export default sidebars; 45 | -------------------------------------------------------------------------------- /src/components/HomepageFeatures/index.tsx: -------------------------------------------------------------------------------- 1 | import clsx from 'clsx'; 2 | import Heading from '@theme/Heading'; 3 | import styles from './styles.module.css'; 4 | 5 | type FeatureItem = { 6 | title: string; 7 | Svg: React.ComponentType>; 8 | description: JSX.Element; 9 | }; 10 | 11 | const FeatureList: FeatureItem[] = [ 12 | { 13 | title: 'Easy to Use', 14 | Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, 15 | description: ( 16 | <> 17 | Docusaurus was designed from the ground up to be easily installed and 18 | used to get your website up and running quickly. 19 | 20 | ), 21 | }, 22 | { 23 | title: 'Focus on What Matters', 24 | Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, 25 | description: ( 26 | <> 27 | Docusaurus lets you focus on your docs, and we'll do the chores. Go 28 | ahead and move your docs into the docs directory. 29 | 30 | ), 31 | }, 32 | { 33 | title: 'Powered by React', 34 | Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, 35 | description: ( 36 | <> 37 | Extend or customize your website layout by reusing React. Docusaurus can 38 | be extended while reusing the same header and footer. 39 | 40 | ), 41 | }, 42 | ]; 43 | 44 | function Feature({title, Svg, description}: FeatureItem) { 45 | return ( 46 |
47 |
48 | 49 |
50 |
51 | {title} 52 |

{description}

53 |
54 |
55 | ); 56 | } 57 | 58 | export default function HomepageFeatures(): JSX.Element { 59 | return ( 60 |
61 |
62 |
63 | {FeatureList.map((props, idx) => ( 64 | 65 | ))} 66 |
67 |
68 |
69 | ); 70 | } 71 | -------------------------------------------------------------------------------- /src/components/HomepageFeatures/styles.module.css: -------------------------------------------------------------------------------- 1 | .features { 2 | display: flex; 3 | align-items: center; 4 | padding: 2rem 0; 5 | width: 100%; 6 | } 7 | 8 | .featureSvg { 9 | height: 200px; 10 | width: 200px; 11 | } 12 | -------------------------------------------------------------------------------- /src/components/ReleaseNotesList/Header/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { type ReactNode } from 'react'; 2 | import Translate from '@docusaurus/Translate'; 3 | import Link from '@docusaurus/Link'; 4 | import Heading from '@theme/Heading'; 5 | import styles from './styles.module.css'; 6 | 7 | function RssLink() { 8 | return ( 9 | 10 | 11 | RSS feeds 12 | 13 | 25 | 26 | 27 | 28 | ); 29 | } 30 | 31 | export default function ReleaseNotesListHeader({ 32 | blogTitle, 33 | }: { 34 | blogTitle: string; 35 | }): ReactNode { 36 | return ( 37 |
38 | 39 | {blogTitle} 40 | 41 |

42 | , 46 | }}> 47 | { 48 | 'Subscribe through {rssLink} to stay up-to-date with new releases!' 49 | } 50 | 51 |

52 |

53 | 58 | 59 | the app page in the App Store 60 | 61 | 62 | ), 63 | }}> 64 | {'If you are looking for the release notes of 7.10.0 or earlier, please check {appStoreLink}.'} 65 | 66 |

67 |
68 | ); 69 | } 70 | -------------------------------------------------------------------------------- /src/components/ReleaseNotesList/Header/styles.module.css: -------------------------------------------------------------------------------- 1 | .rss, 2 | .rss:hover { 3 | color: #f26522; 4 | } 5 | 6 | -------------------------------------------------------------------------------- /src/components/ReleaseNotesList/index.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | import React, { type ReactNode } from 'react'; 9 | import clsx from 'clsx'; 10 | import { 11 | PageMetadata, 12 | HtmlClassNameProvider, 13 | ThemeClassNames, 14 | } from '@docusaurus/theme-common'; 15 | import BlogLayout from '@theme/BlogLayout'; 16 | import BlogListPaginator from '@theme/BlogListPaginator'; 17 | import BlogPostItems from '@theme/BlogPostItems'; 18 | import SearchMetadata from '@theme/SearchMetadata'; 19 | import type { Props } from '@theme/BlogListPage'; 20 | import ReleaseNotesListHeader from './Header'; 21 | 22 | function ListMetadata(props: Props): ReactNode { 23 | const { metadata } = props; 24 | const { blogTitle, blogDescription } = metadata; 25 | return ( 26 | <> 27 | 28 | 29 | 30 | ); 31 | } 32 | 33 | function ListContent(props: Props): ReactNode { 34 | const { metadata, items, sidebar } = props; 35 | const { blogTitle } = metadata; 36 | return ( 37 | 38 | 39 | 40 | 41 | 42 | ); 43 | } 44 | 45 | export default function ReleaseNotesList(props: Props): ReactNode { 46 | return ( 47 | 52 | 53 | 54 | 55 | ); 56 | } 57 | -------------------------------------------------------------------------------- /src/css/custom.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Any CSS included here will be global. The classic template 3 | * bundles Infima by default. Infima is a CSS framework designed to 4 | * work well for content-centric websites. 5 | */ 6 | 7 | /* You can override the default Infima variables here. */ 8 | :root { 9 | --ifm-color-primary: #2e8555; 10 | --ifm-color-primary-dark: #29784c; 11 | --ifm-color-primary-darker: #277148; 12 | --ifm-color-primary-darkest: #205d3b; 13 | --ifm-color-primary-light: #33925d; 14 | --ifm-color-primary-lighter: #359962; 15 | --ifm-color-primary-lightest: #3cad6e; 16 | --ifm-code-font-size: 95%; 17 | --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); 18 | } 19 | 20 | /* For readability concerns, you should choose a lighter palette in dark mode. */ 21 | [data-theme='dark'] { 22 | --ifm-color-primary: #25c2a0; 23 | --ifm-color-primary-dark: #21af90; 24 | --ifm-color-primary-darker: #1fa588; 25 | --ifm-color-primary-darkest: #1a8870; 26 | --ifm-color-primary-light: #29d5b0; 27 | --ifm-color-primary-lighter: #32d8b4; 28 | --ifm-color-primary-lightest: #4fddbf; 29 | --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); 30 | } 31 | -------------------------------------------------------------------------------- /src/pages/markdown-page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown page example 3 | --- 4 | 5 | # Markdown page example 6 | 7 | You don't need React to write simple standalone pages. 8 | -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/.nojekyll -------------------------------------------------------------------------------- /static/img/appstore-badge copy.svg: -------------------------------------------------------------------------------- 1 | 2 | Download_on_the_App_Store_Badge_US-UK_RGB_blk_4SVG_092917 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /static/img/appstore-badge.svg: -------------------------------------------------------------------------------- 1 | 2 | Download_on_the_App_Store_Badge_US-UK_RGB_blk_4SVG_092917 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /static/img/context-menu-redirector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/context-menu-redirector.png -------------------------------------------------------------------------------- /static/img/docusaurus-social-card.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/docusaurus-social-card.jpg -------------------------------------------------------------------------------- /static/img/docusaurus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/docusaurus.png -------------------------------------------------------------------------------- /static/img/files-share-ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/files-share-ios.png -------------------------------------------------------------------------------- /static/img/library-screenshot.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/library-screenshot.webp -------------------------------------------------------------------------------- /static/img/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | web/icon 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /static/img/menubar-file-redirector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/menubar-file-redirector.png -------------------------------------------------------------------------------- /static/img/menubar-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/menubar-file.png -------------------------------------------------------------------------------- /static/img/multiselect-on-macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/multiselect-on-macos.png -------------------------------------------------------------------------------- /static/img/prepareExtensionPermissionAlert@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/prepareExtensionPermissionAlert@3x.png -------------------------------------------------------------------------------- /static/img/safari-additional-permission-alert.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/safari-additional-permission-alert.webp -------------------------------------------------------------------------------- /static/img/share-on-macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/share-on-macos.png -------------------------------------------------------------------------------- /static/img/share-sheet-ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mshibanami/redirect-web/13cd99fbcbba5b3980f033b4a47a3ccacbe9512b/static/img/share-sheet-ios.png -------------------------------------------------------------------------------- /static/img/undraw_docusaurus_tree.svg: -------------------------------------------------------------------------------- 1 | 2 | Focus on What Matters 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /static/misc/reddit-to-redlib.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Reddit → Redlib 8 | 114 | 115 | 116 | 117 |
118 |

Reddit → Redlib

119 |
120 | 121 |
122 |
123 |

About

124 |

This tool automatically redirects Reddit links to available Redlib instances. Redlib is a private 125 | front-end for Reddit that doesn't require JavaScript to work.

126 | 127 |

How to Use

128 |
    129 |
  • Add your Reddit URL as a parameter to this page using ?url= (make sure the URL is 130 | properly URL-encoded)
  • 131 |
  • The redirector will find an available Redlib instance and redirect you there
  • 132 |
  • Previously working instances are cached and prioritized for faster access
  • 133 |
134 | 135 |

Example

136 |

To visit r/privacy on Redlib, use:

137 |
138 | reddit-redirector.html?url=https%3A%2F%2Freddit.com%2Fr%2Fprivacy 139 |
140 |
141 | 142 |
143 |
144 | 145 |
146 |
147 |
148 | 149 |
153 | 154 | 316 | 317 | 318 | 319 | -------------------------------------------------------------------------------- /static/misc/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | test 9 | 10 | 11 | 12 |

This is test.html on GitHub Pages.

13 | 14 |

15 | 16 |

17 | 18 |

19 | [Link] Open yattee://watch?v=lrVT5VFfi5w 20 |

21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /static/misc/test.js: -------------------------------------------------------------------------------- 1 | document.getElementById('button1').addEventListener('click', function () { 2 | const deepLinkURL = "yattee://watch?v=lrVT5VFfi5w"; 3 | window.open(deepLinkURL, '_self'); 4 | }); 5 | -------------------------------------------------------------------------------- /static/misc/url-opener.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | URL Redirect - Redirect Web 8 | 51 | 52 | 53 | 54 |
55 |

Redirecting...

56 |

You are being redirected to:

57 |

If you are not redirected automatically, please click here.

58 |
59 | 60 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /static/rules/add-parameters.redirectweb: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "captureGroupProcesses": [ 7 | { 8 | "groupIndex": 3, 9 | "process": { 10 | "id": "replaceOccurrences", 11 | "matchingPattern": { 12 | "type": "regularExpression", 13 | "value": "\\?(.*)" 14 | }, 15 | "replacement": "&$1" 16 | } 17 | } 18 | ], 19 | "comments": "", 20 | "destinationURLPattern": "$1?layout=desktop$3", 21 | "exampleURLs": [ 22 | "https:\/\/example.com\/hello?theme=dark", 23 | "https:\/\/example.com\/hello", 24 | "https:\/\/example.com\/hello?layout=desktop&theme=dark" 25 | ], 26 | "excludeURLPatterns": [ 27 | { 28 | "type": "regularExpression", 29 | "value": ".*[&?]layout=[^&]*.*" 30 | } 31 | ], 32 | "kind": "Redirect", 33 | "sourceURLPattern": { 34 | "type": "regularExpression", 35 | "value": "(https:\/\/example.com\/[^?]*)((\\?(.*))?)" 36 | }, 37 | "title": "Always Use Desktop Layout" 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /static/rules/reduce-twitter-addiction.redirectweb: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "captureGroupProcesses": [], 7 | "comments": "", 8 | "destinationURLPattern": "https:\/\/insighttimer.com\/saraauster\/guided-meditations\/calm", 9 | "exampleURLs": [ 10 | "https:\/\/x.com\/home", 11 | "https:\/\/twitter.com\/home" 12 | ], 13 | "excludeURLPatterns": [], 14 | "kind": "Redirect", 15 | "sourceURLPattern": { 16 | "type": "regularExpression", 17 | "value": "https:\/\/(twitter|x).com\/.*" 18 | }, 19 | "title": "Reduce Twitter Addiction" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /static/rules/remove-parameters.redirectweb: -------------------------------------------------------------------------------- 1 | { 2 | "bundleID": "io.github.mshibanami.RedirectWebForSafari", 3 | "kind": "RedirectList", 4 | "redirects": [ 5 | { 6 | "captureGroupProcesses": [ 7 | { 8 | "groupIndex": 0, 9 | "process": { 10 | "id": "replaceOccurrences", 11 | "matchingPattern": { 12 | "type": "regularExpression", 13 | "value": "&?source=[^&]*" 14 | }, 15 | "replacement": "" 16 | } 17 | } 18 | ], 19 | "comments": "", 20 | "destinationURLPattern": "$0", 21 | "exampleURLs": [ 22 | "https:\/\/example.com\/?source=twitter", 23 | "https:\/\/example.com\/?hello=world&source=twitter&foo=bar" 24 | ], 25 | "excludeURLPatterns": [], 26 | "kind": "Redirect", 27 | "sourceURLPattern": { 28 | "type": "wildcard", 29 | "value": "https:\/\/example.com\/*" 30 | }, 31 | "title": "Remove parameters" 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // This file is not used in compilation. It is here just for a nice editor experience. 3 | "extends": "@docusaurus/tsconfig", 4 | "compilerOptions": { 5 | "baseUrl": "." 6 | } 7 | } 8 | --------------------------------------------------------------------------------