URL mod_rewrite如何正确创建语法?

时间:2014-10-14 05:04:02

标签: php regex .htaccess mod-rewrite

我有以下网址:

http://example.com/files/101-info/index.php

我的问题是:

  1. 是否可以删除网址中的 101 -
  2. 是否可以在地址栏中重写名称,但是将文件保留在当前位置?
  3. 我想让文件显示在:

    http://example.com/files/info/index.php
    

    但实际上仍在:

    /var/www/htdocs/files/101-info/index.php
    

    这是我尝试的内容,但我无法删除 101 - ,并且重定向无效:

    RewriteEngine On
    RewriteRule ^([^/]+)/([0-9]+)-([^\/]+)/(.+)\.php$ /$1/$2/$4 [R] // also tried [NC,QSA]
    

1 个答案:

答案 0 :(得分:0)

注意: 请注意,如果您的.htaccess中有其他规则未在问题中提及,并且未遵守以下规则:在适当的地方,它不会按预期工作。

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+files/[0-9]+-([^/]+)/([^\s\?]+) [NC]
RewriteRule ^ /files/%1/%2 [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(files)/([^/]+)/([^/]+)$ /$1/101-$2/$3 [L]

第一条规则将删除101-,第二条规则将在内部接受101-,而无需更改文件夹名称或文件所在的位置。

一旦您确认它正常工作,请将其从[R=302,L]更改为[R=301,L]

由于您之前使用的是重定向,因此您的浏览器可能会被缓存,因此请清除缓存并确保使用其他浏览器测试该URL,直到您的缓存被清除为止,因为它在删除后始终不会发生它