友情URL htaccess重写规则正则表达式

时间:2013-03-04 14:21:02

标签: regex apache .htaccess url-rewriting friendly-url

我试图找出为什么我的htaccess文件中的重写规则没有将URL更改为更多“SEO友好URL”。

以下是我的意思的一个例子:

我想离开这个:

www.mydomain.com/Folder/post.php?url="how-to-make-me-a-happy-camper"

对此:

www.mydomain.com/Folder/how-to-make-me-a-happy-camper

或者这个:

www.mydomain.com/Folder/post/how-to-make-me-a-happy-camper

这是我的htacess代码:

RewriteEngine on
RewriteRule ^post/([a-zA-Z0-9-/]+)$ /post.php?url=$1

或没有帖子/

我似乎无法使正则表达式工作,因为当我按照链接时,它会带我去 www.mydomain.com/Folder/post.php?url=how-to-make-me-a-happy-camper

2 个答案:

答案 0 :(得分:1)

虽然问题很混乱(描述与重写规则所指示的相反)并且没有所有必需的信息,但您可以在根目录中的一个.htaccess文件中尝试:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !post\.php             [NC]
RewriteCond %{REQUEST_URI} ^/Folder               [NC]
RewriteRule ^.*/([^/]+)/? /Folder/post.php?url=$1 [L]

无声地映射

http://www.mydomain.com/Folder/post/anything

http://www.mydomain.com/Folder/anything

http://www.mydomain.com/Folder/post.php?url=anything

假设postanythingFolder变量,而假设脚本名称(post.php)是固定的。

对于永久和可见重定向,将[L]替换为[R = 301,L]

答案 1 :(得分:0)

在htaccess文件中使用RewriteBase选项。

 RewriteBase / #( or if your document root in a subfolder named Folder: /Folder/ )

你应该添加两个RewriteCondition,所以你的.htaccess文件(它不是连接到你的主题但是如果你使用apache rewrite_mod则推荐)应该是这样的:

RewriteEngine on

RewriteBase /Folder/
RewriteCond %{REQUEST_FILENAME} !-f # the requested uri does not points to a file
RewriteCond %{REQUEST_FILENAME} !-d # the requested uri does not points to a directory
RewriteRule ^post/([a-zA-Z0-9-/]+)$ post.php?url=$1

并且.htacces文件应该是post.php文件所在的位置。 (在本例中名为Folder的目录中)