source

.htaccess 내부 리다이렉트가 문자열 매개 변수와 함께 작동하지 않음

gigabyte 2023. 2. 14. 21:27
반응형

.htaccess 내부 리다이렉트가 문자열 매개 변수와 함께 작동하지 않음

그래서 몇 시간 동안 이걸 했는데도 해결이 안 돼.stackoverflow에서는 문제를 해결할 수 없습니다.이 문제는 내 .htaccess에 다음과 같은 리다이렉트 규칙이 있다는 것입니다.

RewriteRule ^store-category/(.+)/?$ /wordpress/store-category/?cid=$1 [QSA,L]

이 리다이렉트는 cid가 숫자일 경우 기능하지만,가 my-key와 같은 문자열을 사용하는 경우에는 기능하지 않습니다.열쇠로 규칙을 이렇게 바꿔야 해요.

RewriteRule ^store-category/(.+)/?$ /wordpress/store-category/?cid=$1 [R,L]

단, 사용자가 눈에 띄게 리다이렉트 되고 URL이 변경되기 때문에 사용하지 않습니다.이게 왜 숫자만 쓰는데 문자열 매개변수는 쓰이지 않는지 설명해주실 분 있나요?어떤 도움이라도 주시면 감사하겠습니다.

편집: .htaccess를 완료합니다.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteRule ^store-category/(.+)/?$ /wordpress/store-category/?cid=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

# END WordPress

로컬에 대해 몇 가지 시도를 해보니 다음 두 가지 규칙을 적용하면 효과가 있습니다.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

소동이 벌어지기 전부터

RewriteRule ^store-category/(.+)/?$ /wordpress/store-category/?cid=$1 [QSA,L]

완성하다.htaccess파일은 다음과 같습니다.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^store-category/(.+)/?$ /wordpress/store-category/?cid=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

하여튼.(.+)/?$최종적인 후행 슬래시는 그룹으로부터 캡처되어 다음 단계로 넘어갑니다.cid파라미터를 지정합니다.카테고리 내부에 슬래시가 없는 경우 를 사용하는 것이 좋습니다.([^/]+)/?$.

업데이트: 는 리다이렉트 상에서 일어나는 일을 이해하고 로그를 유효하게 합니다(이것에 대해서는, http://httpd.apache.org/docs/current/mod/mod_rewrite.html 를 참조해 주세요).호스트상에서 유효하게 했다.mod_rewrite.c:trace3다음과 같은 로그인을 받습니다.error_log(트래킹 라인만)rewrite)

[Fri Aug 04 12:48:56.904099 2017] [rewrite:trace3] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] [perdir /var/www/localhost/htdocs/wordpress/] strip per-dir prefix: /var/www/localhost/htdocs/wordpress/store-category/my-id -> store-category/my-id
[Fri Aug 04 12:48:56.904123 2017] [rewrite:trace3] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] [perdir /var/www/localhost/htdocs/wordpress/] applying pattern '^index\\.php$' to uri 'store-category/my-id'
[Fri Aug 04 12:48:56.904129 2017] [rewrite:trace3] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] [perdir /var/www/localhost/htdocs/wordpress/] strip per-dir prefix: /var/www/localhost/htdocs/wordpress/store-category/my-id -> store-category/my-id
[Fri Aug 04 12:48:56.904132 2017] [rewrite:trace3] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] [perdir /var/www/localhost/htdocs/wordpress/] applying pattern '^store-category/(.+)/?$' to uri 'store-category/my-id'
[Fri Aug 04 12:48:56.904143 2017] [rewrite:trace2] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] [perdir /var/www/localhost/htdocs/wordpress/] rewrite 'store-category/my-id' -> '/wordpress/store-category/?cid=my-id'
[Fri Aug 04 12:48:56.904147 2017] [rewrite:trace3] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] split uri=/wordpress/store-category/?cid=my-id -> uri=/wordpress/store-category/, args=cid=my-id
[Fri Aug 04 12:48:56.904151 2017] [rewrite:trace2] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] [perdir /var/www/localhost/htdocs/wordpress/] trying to replace prefix /var/www/localhost/htdocs/wordpress/ with /wordpress/
[Fri Aug 04 12:48:56.904155 2017] [rewrite:trace2] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] [perdir /var/www/localhost/htdocs/wordpress/] trying to replace context docroot /var/www/localhost/htdocs with context prefix 
[Fri Aug 04 12:48:56.904158 2017] [rewrite:trace1] [pid 22823:tid 140368028878592] mod_rewrite.c(477): [client ::1:58312] ::1 - - [localhost/sid#788520][rid#7fa9e4002970/initial] [perdir /var/www/localhost/htdocs/wordpress/] internal redirect with /wordpress/store-category/ [INTERNAL REDIRECT]

(디폴트 문서를 검색하는 동안 다른 로그에 의해 검출됩니다).index.php)

Regex는 욕심이 많다(왼쪽에서 오른쪽으로).당신은 다른 것들을 더 많이 긁어모으고 있어요.URL에는 클래스가 아닌 것을 사용하는 것이 가장 간단합니다(다만, 모든 것에 일치하는 「.」는 거의 없습니다).

RewriteRule ^store-category/([^\/]+)/?$ store-category/?cid=$1 [QSA,L]

또한 스토어 카테고리 ID 뒤에 잘못된 형식이 있을 수 있는 URL을 처리하는 방법에 따라 이를 단순화할 수도 있습니다.

RewriteRule ^store-category/([^\/]+) store-category/?cid=$1 [QSA,L]

편집: 맞습니다.모든 htaccess를 테스트하지 않았습니다.워드프레스 경로를 재작성 베이스와 규칙에 두 번 지정합니다.위의 규칙을 업데이트하고 업데이트된 솔루션에 대한 링크를 테스터에 제공했습니다.

http://htaccess.mwl.be?share=116de701-cf8a-577c-bab5-5c357d844452

언급URL : https://stackoverflow.com/questions/45341889/htaccess-internal-redirect-not-working-with-string-parameter

반응형