Php 在htaccess中为多个页面重写URL

Php 在htaccess中为多个页面重写URL,php,apache,.htaccess,Php,Apache,.htaccess,我需要将URL从两个不同的页面重定向到可读的URL。 我的.htaccess看起来像这样 Options +FollowSymLinks -MultiViews -Indexes RewriteEngine On RewriteRule ^([a-zA-Z0-9-/]+)$ blog-detail.php?url=$1 RewriteRule ^([a-zA-Z0-9-/]+)/$ blog-detail.php?url=$1 RewriteRule ^([a-zA-Z0-9]+)/([a-zA

我需要将URL从两个不同的页面重定向到可读的URL。 我的.htaccess看起来像这样

Options +FollowSymLinks -MultiViews -Indexes
RewriteEngine On
RewriteRule ^([a-zA-Z0-9-/]+)$ blog-detail.php?url=$1
RewriteRule ^([a-zA-Z0-9-/]+)/$ blog-detail.php?url=$1
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ page.php?pid=$1
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/$ page.php?pid=$1 
使用blog-detail.php的第一个URL工作正常。我的URL可以类似于mysite.com/latest-news-story


但是,除非我删除blog细节重写规则,否则page.php的第二种方法不起作用。我怎么能同时拥有这两个呢?

实际上,您可以将检查终止
/
的规则合并为一个规则

所以,你实际上只需要以下两条规则

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/-]+)/?$ page.php?pid=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ blog-detail.php?url=$1 [QSA,L]

我希望将像mysite.com/latest-news-article这样的请求传递到blog detail,并将像mysite.com/new-page这样的请求传递到page.php。在我的当前规则中,只有第一个规则有效,在本例中,它将所有请求传递给blog detail忽略页面。php请更详细地概述链接格式。您希望服务器如何区分最新新闻文章和新页面?您是否看到
/
介于
^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$
之间?这意味着您需要像
mysite.com/part1/part2
这样的URL。我想,以这种方式,服务器无法区分这两个URL。您只能将重写请求推送到一个文件/url吗?不,您可以将请求推送到不同的url,但需要区分哪些请求应转到哪个url。例如,你可以说如果url以最新的“转到博客”开头,如果不是“转到页面”。但我需要从你那里知道这一点,因为我猜不出你的具体要求是什么。好吧,我的博客页面设置为使用文本段塞,它们通常看起来像mysite.com/fully-story-about-nothing,并直接指向博客细节。对于页面,它们通常看起来像mysite.com/news或mysite.com/contact。因此,它们都是基于文本的,并且使用文本slug从数据库中获取内容。