.htaccess帮助需要制作漂亮的推荐链接

时间:2015-12-17 23:45:04

标签: mod-rewrite rewrite

我需要有关漂亮的推荐链接的帮助。例如,这里是推荐链接

http://www.my-domain.com/register.php?ref=john.doe

这是一个完美的网址,但看起来不像以下

http://www.my-domain.com/john.doe

如何使用.htaccess文件实现此目的?请注意,我的服务器中有index.php,member.php和其他许多php文件。此外,如果有人写my-domain.com,则需要点击index.php文件。

任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:0)

根据您的示例,您可以使用以下.htaccess

DirectoryIndex index.php
RewriteEngine On
RewriteRule ^([a-zA-Z]+\.php)$ $1 [NC,L]
RewriteRule ^([a-zA-Z]+\.[a-zA-Z]+)$ register.php?ref=$1

其工作原理如下:

  • 第1行:如果有人访问index.php,则将索引文件设置为http://www.my-domain.com/。这应该已经有效,但以防万一。
  • 第2行:启用RewriteEngine
  • 第3行:如果有人想要访问以.php结尾的任何内容(技术上:至少包含一个字符的内容),则只会转发(即foo.php将映射到foo.php )。 [NC,L]启用不区分大小写的匹配(对于扩展 - 您永远不会知道)并阻止执行任何进一步的规则。否则第二个也会每次匹配。
  • 第4行:如果有人想要访问任何匹配&#34;至少一个字符,一个点,至少还有一个字符&#34;,那么这将映射到register.php?ref=<input>

注意:这将有效防止所有以.php结尾的用户名,但允许访问您的所有文件。它还会阻止包含少于或多于一个点的用户名,如果您的文件或用户名包含任何其他字符(例如foo_bar.phpi_love_php),它将以当前形式无效。但如果需要,可以轻松克服这两个限制,只提供有关预期行为的更多细节。

可以添加RewriteCond以检查是否确实存在具有所请求名称的.php文件,否则将其视为用户名,但我真的不喜欢&#39 ;认为你应该这样做(考虑添加新文件)。

答案 1 :(得分:0)

这将为您提供所需的一切。此规则将处理好的链接,并将旧链接重定向到漂亮的链接。

 public class PixelSelectorVM : ViewModelBase
        {
            private BitmapImage frame;
            public MainWindowVM parentMainWindowVM;
            private ImageColorPicker imageColorPicker;

            public ImageColorPicker MyImageColorPicker
            {
                get
                {
                    return this.imageColorPicker;
                }
                set
                {
                    this.imageColorPicker = value;
                    OnPropertyChanged("MyImageColorPicker");
                }
            }
            public BitmapImage Frame
            {
                get
                {
                    return this.frame;
                }
                set
                {
                    this.frame = value;
                    OnPropertyChanged("Frame");
                }
            }

            public PixelSelectorVM(BitmapImage image, MainWindowVM mainWindowVM)
            {
                this.frame = image;
                this.parentMainWindowVM = mainWindowVM;
                this.imageColorPicker = new ImageColorPicker();
                this.imageColorPicker.Source = image;
            }

            public PixelSelectorVM() { }

            public ICommand Save
            {
                get
                {
                    return new RelayCommand(SaveExecute);
                }
            }

            public ICommand Cancel
            {
                get
                {
                    return new RelayCommand(CancelExecute);
                }
            }

            private void SaveExecute()
            {

            }

            private void CancelExecute()
            {

            }
        }